home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / language / albug.crf < prev    next >
Text File  |  1995-04-22  |  90KB  |  1,914 lines

  1. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 1
  2. ALBUG.M65
  3.  
  4.      1                            ;<HESS.ATARI>ALBUG.M65.71 12-Mar-82 15:25:26, Edit by HESS
  5.      2                        
  6.      3                                .TITLE LBUG - 6502 DEBUGGER (ATARI VERSION)
  7.      4                                ; (C) Ted Hess, Hudson, Ma. 1977,1978,1979,1980,1981,1982 
  8.      5                        
  9.      6                                .LIST    MB        ;LIST BINARY IN MACROS
  10.      7                                .NLIST    TOC        ;NO TABLE OF CONTENTS
  11.      8                                .ENABL    LC        ;ALLOW LOWER CASE TEXT
  12.      9                        
  13.     10                            ; INVOKE SYSTEM MACROS FOR PARAMETER DEFINITIONS
  14.     11                        
  15.     12                                .MCALL    ATARI
  16.     13                                .MCALL    M6502
  17.     14    0000                            ATARI
  18.     15    0000                            M6502
  19.     16                        
  20.     17                            ;***** THINGS TO DO ******
  21.     18                            ;
  22.     19                            ; 1) Re-write parser for DDT syntax and better defaults
  23.     20                            ;    Make better use of ATARI keyboard!
  24.     21                            ;
  25.     22                            ;*************************
  26.     23                        
  27.     24                            ;LBUG STORAGE ASSIGNMENTS (PAGE 0)
  28.     25                        
  29.     26         00E0               INBUF    =$E0        ;INPUT BUFFER (2 BYTES)
  30.     27         00E2               POINT    =$E2        ;OPEN CELL ADDRS (2 BYTES)
  31.     28         00E4               AC    =$E4        ;ACCUMULATOR
  32.     29         00E5               XREG    =$E5        ;X INDEX
  33.     30         00E6               YREG    =$E6        ;Y INDEX
  34.     31         00E7               PS    =$E7        ;PROCESSOR STATUS REG
  35.     32         00E8               SP    =$E8        ;STACK POINTER
  36.     33                        
  37.     34                            ;RANDOM CONSTANTS AND PARAMETERS
  38.     35                        
  39.     36         0031               DSKCOD    =$31        ;DISK DEVICE CODE
  40.     37         0052               DSKR    ='R        ;DISK READ COMMAND
  41.     38         0057               DSKW    ='W        ;DISK WRITE COMMAND
  42.     39         0008               MAXBP    =8        ;EIGHT IS TRADITIONAL (BREAK POINTS)
  43.     40         0018               LNSCR    =24        ;# OF LINES ON SCREEN
  44.     41         0037               LPP    =55        ;LINES/PAGE ON PRINTER
  45.     42                        
  46.     43                            .IIF NDF,LORG, LORG= $8000    ;DEFAULT PROG ORIGIN
  47.     44                        
  48. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 2
  49. ALBUG.M65
  50.  
  51.     46                            ;MAIN ENTRY POINT - NORMAL START (LORG)
  52.     47                            ;RESET ENTRY - REMOVE BREAKPOINTS (LORG+3)
  53.     48                        
  54.     49    0000                        SETPC PPC,LORG
  55.     50                        
  56.     51                            ;NORMAL START ENTRY
  57.     52                        
  58.     53    8000   4C   73   80     START:    JMP    STRT1
  59.     54    8003   4C   70   80         JMP    RST
  60.     55                        
  61.     56    8006   7D   4C   61     VERS:    .ASCII    <.ATCLR>"Lady Bug - V4.0, (C) Ted Hess 1981"<.ATEOL>
  62.     8009   64   79   20 
  63.     800C   42   75   67 
  64.     800F   20   2D   20 
  65.     8012   56   34   2E 
  66.     8015   30   2C   20 
  67.     8018   28   43   29 
  68.     801B   20   54   65 
  69.     801E   64   20   48 
  70.     8021   65   73   73 
  71.     8024   20   31   39 
  72.     8027   38   31   9B 
  73.     57    802A 0001               ROF:    .BLKB    1    ; REGISTER OPENED FLAG
  74.     58                                        ;  0 = CLOSED
  75.     59                                        ;  $1 = HEX/OCTAL
  76.     60                                        ;  $FF = SYMBOLIC
  77.     61    802B 0001               CF:    .BLKB    1    ;ADDRESS FLAG
  78.     62                                        ;  $FF = NO ADDRESSES TYPED
  79.     63                                        ;  $00 = ONE ADDRESS TYPED
  80.     64                                        ;  $01 = COMMA TYPED
  81.     65    802C 0002               PRPC:    .BLKB    2    ;PROGRAM COUNTER (AT BREAK)
  82.     66    802E 0001               LENGTH:    .BLKB    1    ; LENGTH OF INSTR (0 := 1-BYTE)
  83.     67    802F 0001               PFRMT:    .BLKB    1    ; PRINT FORMAT INDEX
  84.     68    8030 0002               VEB:    .BLKB    2    ;4 BYTE PROGRAM BLOCK
  85.     69    8032 0001               LMNEM:    .BLKB    1    ;(VEB+2) TEMP FOR MNEMONIC PRINT
  86.     70    8033 0001               RMNEM:    .BLKB    1    ;(VEB+3) ...
  87.     71    8034 0002               STARTA:    .BLKB    2    ;STARTING ADDRESS
  88.     72    8036 0002               ENDAD:    .BLKB    2    ;ENDING ADDRESS
  89.     73    8038 0001               TEMPX:    .BLKB    1    ;NEED TO SAVE X AROUND OS
  90.     74    8039 0001               TEMPY:    .BLKB    1    ;TEMP SAVE Y
  91.     75    803A 0001               SNGLF:    .BLKB    1    ;SINGLE STEP FLAG
  92.     76    803B 0001               BPN:    .BLKB    1    ;BREAKPOINT NUMBER OR 0
  93.     77    803C 0001               DRVNO:    .BLKB    1    ;DISK UNIT #
  94.     78    803D 0001               PIOCB:    .BLKB    1    ;IOCB INDEX FOR PRINTER/EDITOR
  95.     79    803E 0001               PNTF:    .BLKB    1    ; PRINTER FLAG
  96.     80                        
  97.     81    803F 0001               TABPT:    .BLKB    1    ;INDEX INTO TAB RING
  98.     82    8040 0008               TABRNG:    .BLKW    8    ;RING BUFFER FOR TAB/UNTAB
  99.     83                        
  100.     84                            ;BREAKPOINT TABLES
  101.     85                        
  102.     86    8050 0008               BPINS:    .BLKB    MAXBP        ;SAVE INSTR
  103.     87    8058 0008               BPCNT:    .BLKB    MAXBP        ;PROCEED COUNT
  104.     88    8060 0008               BPLOCL:    .BLKB    MAXBP        ;LOCATION LOW
  105.     89    8068 0008               BPLOCH:    .BLKB    MAXBP        ;LOCATION HIGH
  106.     90                        
  107.     91                            ;RESET ENTRY
  108.     92                        
  109.     93    8070   20   3F   88     RST:    CALL    REMB        ;REMOVE BREAK POINTS
  110.     94                             
  111.     95                            ; NORMAL STARTUP JOINS HERE
  112.     96                        
  113.     97    8073   20   A8   87     STRT1:    CALL    INITS        ;INITIALIZE THINGS
  114.     98    8076                        TYPE    VERS        ;OUTPUT HERALD
  115.    (1)    8076   A2   06      
  116.    (1)    8078   A0   80      
  117.    (1)    807A   20   85   F3 
  118.     99    807D                        CLR    <SNGLF,BPN,DRVNO,PS> ;CLEAR SS FLAG, ETC.
  119.    (1)    807D   A9   00      
  120.    (2)    807F   8D   3A   80 
  121.    (2)    8082   8D   3B   80 
  122.    (2)    8085   8D   3C   80 
  123.    (2)    8088   85   E7      
  124.    100    808A                        SET2    BREAK,VBREAK    ;BREAK POINT ENTRY
  125.    (1)    808A   A9   73      
  126.    (1)    808C   8D   06   02 
  127. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 2-1
  128. ALBUG.M65
  129.  
  130.    (1)    808F   A9   88      
  131.    (1)    8091   8D   07   02 
  132.    101    8094   BA                   TSX            ;SAVE CURRENT STACK POINTER
  133.    102    8095   86   E8              STX    SP
  134.    103    8097   4C   BC   82         JMP    RALL        ;CLEAR ALL BREAK POINTS
  135.    104                        
  136. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 3
  137. ALBUG.M65
  138.  
  139.    106                            ;MAIN DECODER
  140.    107                        
  141.    108    809A   20   DF   80     ERR:    CALL    ERRFST        ;PRINT <BELL>?
  142.    109                        
  143.    110    809D   20   2E   88     DCD:    CALL    CLOSEP        ;CLOSE PRINTER IF OPEN
  144.    111    80A0   20   85   87         CALL    CRLFS        ;PRINT CRLF
  145.    112    80A3                    DCD4:    CLR    ROF        ;CLOSE OPEN REG
  146.    (1)    80A3   A9   00      
  147.    (2)    80A5   8D   2A   80 
  148.    113    80A8   A6   E8              LDX    SP        ;RESTORE STACK POINTER
  149.    114    80AA   9A                   TXS
  150.    115                        
  151.    116    80AB   A9   FF          SCAN:    LDA    #$FF        ;SET UP ADDRESS FLAG
  152.    117    80AD   8D   2B   80         STA    CF
  153.    118    80B0   20   7C   86         CALL    GETNUM        ;INPUT SOMETHING
  154.    119    80B3   AE   2B   80         LDX    CF        ;GET QUANITY TYPED FLAG
  155.    120    80B6   30   0A              BMI    CLGL        ;DO NOT DESTROY OLD VALUE FOR ' AND =
  156.    121                        
  157.    122    80B8                    SCAN1:    MOV2X    INBUF,STARTA    ;SET UP STARTING ADDRESS
  158.    (1)    80B8   A6   E0      
  159.    (1)    80BA   8E   34   80 
  160.    (1)    80BD   A6   E1      
  161.    (1)    80BF   8E   35   80 
  162.    123                            ;FALL INTO SPECAIL CHARACTER DECODER
  163.    124                        
  164.    125                        
  165.    126                            ;HERE TO CHECK LEGAL CHARACTER
  166.    127                        
  167.    128    80C2   A2   0C          CLGL:    LDX    #MAXL        ;INIT INDEX
  168.    129    80C4   DD   EE   8A     LGL1:    CMP    LGCH,X        ;MATCH?
  169.    130    80C7   F0   05              BEQ    LGL2        ;YES - PROCEED
  170.    131    80C9   CA                   DEX            ;NO - STEP TO NEXT
  171.    132    80CA   10   F8              BPL    LGL1        ;BRANCH IF MORE TO GO
  172.    133    80CC   30   CC              BMI    ERR        ;ERROR IF NONE
  173.    134                        
  174.    135                            ;FOUND MATCH - DISPATCH
  175.    136                        
  176.    137    80CE   8A               LGL2:    TXA            ;GET INDEX
  177.    138    80CF   0A               LGL3:    ASL    A        ; TIMES 2
  178.    139    80D0   AA                   TAX            ; BACK TO X
  179.    140    80D1   BD   06   8B         LDA    LDISP+1,X    ;GET HIGH BYTE OF XFER
  180.    141    80D4   48                   PHA            ;PUT ON STACK
  181.    142    80D5   BD   05   8B         LDA    LDISP,X        ;GET XFER LOW
  182.    143    80D8   48                   PHA            ;STACK NOW HAS XFER ADDRS
  183.    144    80D9   AD   2B   80         LDA    CF        ;GET ARGUMENT FLAG IN AC
  184.    145    80DC   C9   01              CMP    #1        ;SET FLAGS BASED ON ONE
  185.    146    80DE   60                   RET            ;DISPATCH
  186.    147                        
  187.    148    80DF   A9   FD          ERRFST:    LDA    #.ATBEL        ;RING BELL
  188.    149    80E1   20   6D   87         CALL    OUTSCH
  189.    150    80E4   A9   3F              LDA    #'?        ;THEN PRINT ?
  190.    151    80E6   4C   6D   87         JMP    OUTSCH
  191. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 4
  192. ALBUG.M65
  193.  
  194.    153                            ;COMMA - SAVE INPUT AS STARTING ADDRESS
  195.    154                        
  196.    155    80E9   AD   2B   80     COMMA:    LDA    CF        ;GET ARGUMENT FLAG IN AC
  197.    156    80EC   D0   AC              BNE    ERR        ;MUST BE ONE AND ONLY ONE ARGUMENT TYPED SO FAR
  198.    157    80EE   20   7C   86         CALL    GETNUM        ;GET ANOTHER ARGUMENT
  199.    158    80F1                    COMMA1:    MOV2X    INBUF,ENDAD    ;SET UP ENDING ADDRESS
  200.    (1)    80F1   A6   E0      
  201.    (1)    80F3   8E   36   80 
  202.    (1)    80F6   A6   E1      
  203.    (1)    80F8   8E   37   80 
  204.    159    80FB   AE   2B   80         LDX    CF        ;GET ARGUMENT FLAG
  205.    160    80FE   E0   02              CPX    #2        ;CHECK TO SEE IF IT IS OPEN
  206.    161    8100   10   98              BPL    ERR        ;NO THEN IT IS AN ERROR
  207.    162    8102   30   BE              BMI    CLGL        ;GO DISPATCH ON BREAK CHARACTER
  208.    163                        
  209.    164                        
  210.    165                            ;ESC SEEN (ECHO $)
  211.    166                        
  212.    167    8104   A9   24          ESC:    LDA    #'$
  213.    168    8106   20   6D   87         CALL    OUTSCH
  214.    169    8109   20   F0   86         CALL    GETSCH        ;GET NEXT CHARACTER
  215.    170    810C   38                   SEC            ;CLEAR BORROW
  216.    171    810D   E9   31              SBC    #'1        ;CHECK FOR NUMBER
  217.    172    810F   30   89              BMI    ERR        ;IF LESS THAN THEN IT IS AN ERROR
  218.    173    8111   C9   08              CMP    #MAXBP        ;IS IT LESS THAN MAXIMUM ALLOWABLE BREAKPOINT
  219.    174    8113   30   24              BMI    ESCB        ;YES GO GET BREAKPOINT B
  220.    175    8115   E9   10              SBC    #@20        ;CHECK FOR A
  221.    176    8117   30   81              BMI    ERR        ;IF LESS THAN A IT IS AN ERROR
  222.    177    8119   29   DF              AND    #@337        ;GET RID OF LOWERCASE BIT
  223.    178    811B   C9   1A              CMP    #'Z-@100    ;IS IT GREATER THAN Z
  224.    179    811D   10   49              BPL    ERR1        ;YES.  REPORT ERROR
  225.    180    811F   AA                   TAX            ;PUT IT IN THE X REGISTER
  226.    181    8120   BD   53   8B         LDA    ARGNUM,X    ;GET NUMBER OF ARGUMENTS
  227.    182    8123   CD   2B   80         CMP    CF        ;IS IT CORRECT
  228.    183    8126   F0   0B              BEQ    10$        ;YES.  SKIP REST OF TEST
  229.    184    8128   C9   80              CMP    #$80        ;IS IT ONE OR NONE FLAG
  230.    185    812A   D0   3C              BNE    ERR1        ;NO GIVE ERROR
  231.    186    812C   AD   2B   80         LDA    CF        ;GET FLAG
  232.    187    812F   C9   01              CMP    #1        ;LESS THAN ONE
  233.    188    8131   10   35              BPL    ERR1        ;NO. GO GIVE ERROR
  234.    189    8133   8A               10$:    TXA            ;GET INDEX BACK TO A
  235.    190    8134   18                   CLC
  236.    191    8135   69   0D              ADC    #<DISP-LDISP>/2    ;CALC TABLE OFFSET
  237.    192    8137   D0   96              BNE    LGL3        ;DISPATCH
  238.    193                        
  239. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 5
  240. ALBUG.M65
  241.  
  242.    195    8139   AA               ESCB:    TAX            ;SAVE BP NUMBER IN X
  243.    196    813A   20   F0   86         CALL    GETSCH        ;GET THE CHARACTER
  244.    197    813D   29   DF              AND    #@337        ;GET RID OF CASE BIT
  245.    198    813F   C9   42              CMP    #'B        ;IS IT A B
  246.    199    8141   D0   25              BNE    ERR1        ;NO. THEN IT IS AN ERROR
  247.    200    8143   4C   6D   82         JMP    BKPT1        ;YES. GO DO BREAKPOINT
  248.    201                        
  249.    202                        
  250.    203                            ;DOT (.) SEEN - SUBSTITUE CURRENT LOC
  251.    204                        
  252.    205    8146                    DOT:    MOV2    POINT,INBUF    ;PUT LOC INTO BUFFER
  253.    (1)    8146   A5   E2      
  254.    (1)    8148   85   E0      
  255.    (1)    814A   A5   E3      
  256.    (1)    814C   85   E1      
  257.    206    814E   20   F0   86     DOT1:    CALL    GETSCH        ;GET ANOTHER CHARACTER
  258.    207    8151   EE   2B   80         INC    CF        ;SAY QUANT TYPED
  259.    208    8154   D0   9B              BNE    COMMA1        ;GO SET UP ENDING ADDRESS
  260.    209    8156   4C   B8   80         JMP    SCAN1        ;BACK TO SCAN LOOP
  261.    210                        
  262.    211                        
  263.    212                            ;PERCENT SEEN - SPECIAL REGISTER
  264.    213                        
  265.    214    8159   20   F0   86     PERC:    CALL    GETSCH        ;LOOK AT NEXT CHAR
  266.    215    815C   29   DF              AND    #@337        ;GET RID OF CASE BIT
  267.    216    815E   A2   04              LDX    #MAXS        ; AND CHECK FOR SPECIAL
  268.    217    8160   DD   FB   8A     PERC1:    CMP    LGPC,X        ;MATCH?
  269.    218    8163   F0   06              BEQ    PERC2        ;???
  270.    219    8165   CA                   DEX            ;NO - STEP TO NEXT
  271.    220    8166   10   F8              BPL    PERC1
  272.    221    8168   4C   9A   80     ERR1:    JMP    ERR        ;ERROR IF NO MORE
  273.    222                        
  274.    223                        
  275.    224                            ;SETUP DESIRED REGISTER ADDRS AS INPUT TYPED
  276.    225                        
  277.    226    816B   BD   00   8B     PERC2:    LDA    PERAD,X        ;GET ADDRS OF BYTE
  278.    227    816E   85   E0              STA    INBUF        ;STORE AS INPUT
  279.    228    8170                        CLR    INBUF+1
  280.    (1)    8170   A9   00      
  281.    (2)    8172   85   E1      
  282.    229    8174   F0   D8              BEQ    DOT1        ;BACK TO INPUT LOOP
  283.    230                        
  284.    231                        
  285.    232                            ;CARRIAGE RETURN TYPED
  286.    233                        
  287.    234    8176   20   27   86     CRET:    CALL    CLSE        ;CLOSE OPEN REG IF ANY
  288.    235    8179   4C   9D   80         JMP    DCD        ;RE-INIT THINGS
  289. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 6
  290. ALBUG.M65
  291.  
  292.    237                            ;SLASH TYPED - OPEN A REG IN SYMBOLIC
  293.    238                        
  294.    239    817C   10   EA          SLSH:    BPL    ERR1        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  295.    240    817E   A9   FF              LDA    #$FF        ;SET ROF FLAG
  296.    241    8180   D0   04              BNE    SLSH1        ;JOIN COMMON CODE
  297.    242                        
  298.    243                            ;SLASH TYPED - OPEN A REG (HEX)
  299.    244                        
  300.    245    8182   10   E4          BRAKET:    BPL    ERR1        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  301.    246    8184   A9   01              LDA    #1        ;SET REG OPEN
  302.    247    8186   8D   2A   80     SLSH1:    STA    ROF
  303.    248    8189   20   6B   87         CALL    OUTSSP        ;TYPE A SPACE
  304.    249    818C   AD   2B   80         LDA    CF        ;ANYTHING TYPED
  305.    250    818F   D0   03              BNE    10$        ; ??
  306.    251    8191   20   41   86         CALL    INTPT        ;YES - OPEN IT
  307.    252    8194   20   2F   87     10$:    CALL    PRTSCN        ;GO DO OUTPUT
  308.    253    8197   4C   AB   80         JMP    SCAN
  309.    254                        
  310.    255                        
  311.    256                            ;LINE FEED - OPEN NEXT REG
  312.    257                        
  313.    258    819A   10   CC          LFD:    BPL    ERR1        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  314.    259    819C   20   85   87         CALL    CRLFS        ;OUTPUT <EOL>
  315.    260    819F   AD   2A   80     LFD0:    LDA    ROF        ;CHECK TYPE
  316.    261    81A2   30   11              BMI    LFDS        ;DO SYMBOLIC NEXT INSTR
  317.    262    81A4   20   27   86         CALL    CLSE        ;CLOSE OPEN REG IF ANY
  318.    263    81A7   20   D0   87         CALL    INCPT        ;STEP TO NEXT LOC
  319.    264    81AA   EE   2A   80     LFDC:    INC    ROF        ;MARK OPEN HEX
  320.    265    81AD   A2   5B              LDX    #'[        ;SLASH
  321.    266    81AF   20   25   87         CALL    PRTSLC        ;GO PRINT THE CONTENTS
  322.    267    81B2   4C   AB   80         JMP    SCAN
  323.    268                        
  324.    269    81B5   20   00   8A     LFDS:    CALL    PCADJ        ;STEP OVER INSTR
  325.    270    81B8   85   E2              STA    POINT        ;SAVE NEW PC
  326.    271    81BA   84   E3              STY    POINT+1
  327.    272    81BC   20   1E   87     LFDS1:    CALL    PRTSLS        ;GO PRINT LOCATION IN SYMBOLIC
  328.    273    81BF   4C   AB   80         JMP    SCAN        ;BACK TO MAIN COMMAND DECODER
  329. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 7
  330. ALBUG.M65
  331.  
  332.    275                            ;^ OR <BS> TYPED - OPEN PREVIOUS
  333.    276                        
  334.    277    81C2   10   A4          BACK:    BPL    ERR1        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  335.    278    81C4   20   27   86         CALL    CLSE        ;CLOSE OPEN REG
  336.    279    81C7   20   4C   86         CALL    DECPT        ;DECREMENT THE POINTER
  337.    280    81CA   20   85   87         CALL    CRLFS        ;PUT OUT A CARRIAGE RETURN LINE FEED
  338.    281    81CD   4C   AA   81         JMP    LFDC        ;COMMON CODE
  339.    282                        
  340.    283                            ;TAB  GO TO ADDRESS IF IN SYMBOLIC MODE
  341.    284                        
  342.    285    81D0   10   96          TAB:    BPL    ERR1        ;ERROR IF MORE THAN 1 ARG
  343.    286    81D2   AD   2A   80         LDA    ROF        ;GET OUTPUT MODE FLAG
  344.    287    81D5   10   91              BPL    ERR1        ;ONLY GET EFFECTIVE ADDRESS IF SYMBOLIC
  345.    288    81D7   AE   3F   80         LDX    TABPT        ;SAVE POINT
  346.    289    81DA   A5   E2              LDA    POINT
  347.    290    81DC   9D   40   80         STA    TABRNG,X    ;IN RING BUFFER
  348.    291    81DF   A5   E3              LDA    POINT+1
  349.    292    81E1   9D   48   80         STA    TABRNG+8,X
  350.    293    81E4   E8                   INX            ;STEP INDEX
  351.    294    81E5   8A                   TXA
  352.    295    81E6   29   07              AND    #$07        ;MASK TO MOD 8 CNTR
  353.    296    81E8   8D   3F   80         STA    TABPT        ;STORE IT BACK
  354.    297    81EB   20   7E   89         CALL    CALCAD        ;CALCULATE EFFECTIVE ADDRESS
  355.    298    81EE                        MOV2    INBUF,POINT    ;GET JMP ADDRESS
  356.    (1)    81EE   A5   E0      
  357.    (1)    81F0   85   E2      
  358.    (1)    81F2   A5   E1      
  359.    (1)    81F4   85   E3      
  360.    299    81F6   20   85   87     TAB1:    CALL    CRLFS        ;PUT OUT CARRIAGE RETURN LINE FEED
  361.    300    81F9   4C   BC   81         JMP    LFDS1        ;GO TYPE OUT NEW ADDRESS
  362.    301                        
  363.    302                            ; UNTABIFY - POP RING THEN TAB
  364.    303                        
  365.    304    81FC   10   03          UNTAB:    BPL    5$        ;ERROR IF ANYTHING TYPED
  366.    305    81FE   AD   2A   80         LDA    ROF        ;REGISTER OPEN FLAG
  367.    306    8201   10   7D          5$:    BPL    ERR2        ;ERROR IF NOT SYMBOLIC MODE
  368.    307    8203   A9   07              LDA    #$7        ;MASK FOR MOD 8 SUBTRACT
  369.    308    8205   CE   3F   80         DEC    TABPT        ;DECREMENT INDEX
  370.    309    8208   2D   3F   80         AND    TABPT        ;MASK IT
  371.    310    820B   8D   3F   80         STA    TABPT        ;STORE RESULT
  372.    311    820E   AA                   TAX            ;XFER TO INDEX
  373.    312    820F   BD   40   80         LDA    TABRNG,X    ;FETCH SAVED VALUE
  374.    313    8212   85   E2              STA    POINT        ;RESTORE TO POINT
  375.    314    8214   BD   48   80         LDA    TABRNG+8,X
  376.    315    8217   85   E3              STA    POINT+1
  377.    316    8219   4C   F6   81         JMP    TAB1        ;FINISH THRU COMMON CODE
  378.    317                        
  379.    318                            ;EQUAL SIGN - TYPE IN OCTAL
  380.    319                        
  381.    320    821C   10   62          TOC:    BPL    ERR2        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  382.    321    821E   AD   34   80         LDA    STARTA        ;GET CHARACTER IN A
  383.    322    8221   8D   2F   80         STA    PFRMT        ;SAVE BYTE
  384.    323    8224   A2   03              LDX    #3        ;TYPE 3 DIGITS
  385.    324    8226   A0   03              LDY    #3        ; OF 3 BITS EACH
  386.    325    8228   18                   CLC            ;INIT CARRY BIT
  387.    326    8229   90   03              BCC    15$        ;SKIP FIRST SHIFT
  388.    327    822B   0E   2F   80     10$:    ASL    PFRMT        ;SHIFT LEFT
  389.    328    822E   2A               15$:    ROL    A        ;GET BIT INTO AC
  390.    329    822F   88                   DEY            ;COUNT BITS
  391.    330    8230   D0   F9              BNE    10$        ;CONTINUE FOR 3 BITS
  392.    331    8232   29   07              AND    #@7        ;GRNTEE OIT
  393.    332    8234   20   A3   87         CALL    HEXST1        ;TYPE OUT
  394.    333    8237   A0   03              LDY    #3        ;RELOAD BIT COUNTER
  395.    334    8239   CA                   DEX            ;DECREMENT DIGIT COUNTER
  396.    335    823A   D0   EF              BNE    10$        ;LOOP TILL DONE
  397.    336    823C   20   6B   87     TOCRET:    CALL    OUTSSP        ;PRINT SPACE
  398.    337    823F   4C   AB   80         JMP    SCAN        ;BACK TO MAIN LOOP
  399.    338                        
  400.    339                        
  401.    340                            ;QUOTE - TYPE OUT ASCII
  402.    341                        
  403.    342    8242   10   3C          QUOTE:    BPL    ERR2        ;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
  404.    343    8244   AD   34   80         LDA    STARTA        ;GET CHARACTER IN A
  405.    344    8247   20   6D   87         CALL    OUTSCH        ;PRINT THE CHARACTER IN ASCII
  406.    345    824A   4C   3C   82         JMP    TOCRET        ;GO PRINT A SPACE AND RETURN
  407.    346                        
  408. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 8
  409. ALBUG.M65
  410.  
  411.    348                            ;$A - TYPE MEMORY OUT IN ASCII
  412.    349                        
  413.    350    824D   20   41   86     ASCII:    CALL    INTPT        ;SET UP POINT FROM ADDRESS TYPED
  414.    351    8250   20   F0   86         CALL    GETSCH        ;GET QUOTE CHARACTER
  415.    352    8253   8D   2B   80         STA    CF        ;SAVE IT FOR COMPARE
  416.    353    8256   20   F0   86     10$:    CALL    GETSCH        ;GET ANOTHER CHARACTER
  417.    354    8259   CD   2B   80         CMP    CF
  418.    355    825C   F0   0A              BEQ    20$        ;IF QUOTE RETURN
  419.    356    825E   A0   00              LDY    #0        ;SET UP FOR INDEXING
  420.    357    8260   91   E2              STA    (POINT),Y    ;PUT THE CHARACTER IN  MEMORY
  421.    358    8262   20   D0   87         CALL    INCPT        ;INCREMENT THE POINTER
  422.    359    8265   4C   56   82         JMP    10$        ;GO DO ANOTHER CHARACTER
  423.    360                        
  424.    361    8268   4C   9D   80     20$:    JMP    DCD        ;GO BACK TO MAIN SCANING LOOP
  425.    362                        
  426.    363                        
  427.    364                            ;$B - BREAKPOINT COMMAND
  428.    365                        
  429.    366    826B   A2   FF          BKPT:    LDX    #$FF        ;SAY NO BREAKPOINT NUMBER GIVEN
  430.    367    826D   AD   2B   80     BKPT1:    LDA    CF        ;GET ARGUMENT FLAG
  431.    368    8270   30   46              BMI    CLRALL        ;POSSIBLE CLEAR ALL $B OR $NB/
  432.    369    8272   E0   00              CPX    #0        ;SPECIFIC BREAK POINT
  433.    370    8274   10   0D              BPL    BKPT2        ; IF QUANT AFTER $
  434.    371    8276   A2   07              LDX    #MAXBP-1    ;LOOK FOR A FREE ONE
  435.    372    8278   BD   50   80     5$:    LDA    BPINS,X
  436.    373    827B   F0   06              BEQ    BKPT2        ;FOUND IF ZERO
  437.    374    827D   CA                   DEX            ;STEP TO NEXT
  438.    375    827E   10   F8              BPL    5$        ; AND TRY AGAIN
  439.    376    8280   4C   9A   80     ERR2:    JMP    ERR        ;BRANCH TO HERE FOR ERROR
  440.    377                        
  441.    378                            ;X NOW CONTAINS AN INDEX INTO THE BP TABLES
  442.    379                        
  443.    380    8283   AD   34   80     BKPT2:    LDA    STARTA        ;CHECK FOR 0$NB
  444.    381    8286   D0   05              BNE    SETBP        ;IF NOT ZERO CONTINUE
  445.    382    8288   AD   35   80         LDA    STARTA+1    ;GET HIGH BYTE
  446.    383    828B   F0   23              BEQ    CLRONE        ;CLEAR JUST ONE
  447.    384                        
  448.    385                            ;NOW SET A BREAK POINT - ADDRS IN INTMP
  449.    386                        
  450.    387    828D                    SETBP:    MOV2    STARTA,INBUF    ;NEED IN PAGE 0 LOC
  451.    (1)    828D   AD   34   80 
  452.    (1)    8290   85   E0      
  453.    (1)    8292   AD   35   80 
  454.    (1)    8295   85   E1      
  455.    388    8297   A0   00              LDY    #0        ;SET FOR INDIRECT
  456.    389    8299   B1   E0              LDA    (INBUF),Y    ;FETCH INSTR
  457.    390    829B   F0   E3              BEQ    ERR2        ;ERROR IF 00
  458.    391    829D   9D   50   80         STA    BPINS,X        ;SAVE IN TABLE
  459.    392    82A0   A5   E0              LDA    INBUF        ;SAVE ADDRS
  460.    393    82A2   9D   60   80         STA    BPLOCL,X    ; LOW
  461.    394    82A5   A5   E1              LDA    INBUF+1        ; AND HIGH
  462.    395    82A7   9D   68   80         STA    BPLOCH,X    ;...
  463.    396                            ;    ...
  464. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 9
  465. ALBUG.M65
  466.  
  467.    398                            ;    ...
  468.    399    82AA   20   62   87     BPXIT:    CALL    PRBLNK        ;PRINT SOME SPACES
  469.    400    82AD   4C   AB   80         JMP    SCAN        ;BACK TO DECODER
  470.    401                        
  471.    402                        
  472.    403                            ;ROUTINE TO CLEAR ONE BREAKPOINT
  473.    404                            ;C(X) - INDEX INTO BP TABLES, C(AC) := 0
  474.    405                        
  475.    406    82B0   9D   50   80     CLRONE:    STA    BPINS,X        ;CLEAR BP
  476.    407    82B3   9D   58   80         STA    BPCNT,X        ; AND PROCEED COUNT
  477.    408    82B6   F0   F2              BEQ    BPXIT        ;RETURN
  478.    409                        
  479.    410                            ;ROUTINE TO CLEAR ALL BREAK POINTS
  480.    411                        
  481.    412    82B8   E0   00          CLRALL:    CPX    #0        ;SPECIFIC BREAK POINT
  482.    413    82BA   10   10              BPL    SHONE        ;SHOW ONE BP
  483.    414    82BC   A2   07          RALL:    LDX    #MAXBP-1    ;INIT COUNT
  484.    415    82BE   A9   00              LDA    #0        ;GET A ZERO
  485.    416    82C0   9D   50   80     5$:    STA    BPINS,X        ;CLEAR BP
  486.    417    82C3   9D   58   80         STA    BPCNT,X        ;...
  487.    418    82C6   CA                   DEX
  488.    419    82C7   10   F7              BPL    5$        ;LOOP TILL DONE
  489.    420    82C9   4C   9D   80         JMP    DCD        ;RE-INIT THINGS
  490.    421                        
  491.    422                        
  492.    423                            ;ROUTINE TO SHOW LOC OF BP
  493.    424                        
  494.    425    82CC   20   F0   86     SHONE:    CALL    GETSCH        ;LOOK AHEAD CHAR
  495.    426    82CF   C9   2F              CMP    #'/        ;GAURNTEE SLASH
  496.    427    82D1   D0   AD              BNE    ERR2
  497.    428    82D3   20   6B   87         CALL    OUTSSP        ;SPACE OVER
  498.    429    82D6   BD   50   80         LDA    BPINS,X        ;SEE IF ACTIVE
  499.    430    82D9   F0   A5              BEQ    ERR2        ;NO - SORRY
  500.    431    82DB   BD   68   80         LDA    BPLOCH,X    ;GET LOC HIGH
  501.    432    82DE   20   91   87         CALL    PRTSBY        ;PRINT IT
  502.    433    82E1   BD   60   80         LDA    BPLOCL,X    ;GET LOC LOW
  503.    434    82E4   20   91   87         CALL    PRTSBY        ;PRINT IT
  504.    435    82E7   4C   9D   80         JMP    DCD        ;CLOSE REG, ETC.
  505. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 10
  506. ALBUG.M65
  507.  
  508.    437                            ;$D - JUMP TO DOS
  509.    438                        
  510.    439    82EA   6C   0A   00     TODOS:    JMP    (DOSVEC)
  511.    440                        
  512.    441                            ;$U - SELECT DISK UNIT
  513.    442                        
  514.    443    82ED   AD   34   80     SETU:    LDA    STARTA        ;GET UNIT #
  515.    444    82F0   F0   8E              BEQ    ERR2        ;MUST BE 1-4
  516.    445    82F2   C9   05              CMP    #5        ;VALID?
  517.    446    82F4   90   8A              BCC    ERR2        ;TOO LARGE
  518.    447    82F6   8D   3C   80         STA    DRVNO        ;STORE UNIT #
  519.    448    82F9   4C   AA   82         JMP    BPXIT        ;RETURN
  520.    449                        
  521.    450                            ;$W - WRITE DISK SECTORS FROM MEMORY
  522.    451                        
  523.    452    82FC   20   6A   86     WRSECT:    CALL    GETVAL        ;BUFFER
  524.    453    82FF   A9   57              LDA    #DSKW        ;WRITE COMMAND
  525.    454    8301   D0   05              BNE    INIDSK        ;DO IT
  526.    455                        
  527.    456                            ;$R - READ DISK SECTORS INTO MEMORY
  528.    457                        
  529.    458    8303   20   6A   86     RDSECT:    CALL    GETVAL        ;GET BUFFER ADDRS
  530.    459    8306   A9   52              LDA    #DSKR        ;READ COMMAND
  531.    460    8308   8D   02   03     INIDSK:    STA    DCOMND        ;STORE
  532.    461    830B                        MOV2    INBUF,DBUFLO    ;SETUP BUFFER
  533.    (1)    830B   A5   E0      
  534.    (1)    830D   8D   04   03 
  535.    (1)    8310   A5   E1      
  536.    (1)    8312   8D   05   03 
  537.    462    8315   20   3E   86         CALL    INTPTC        ;SET POINT := START SECTOR
  538.    463    8318   A9   31              LDA    #DSKCOD        ;BUS I.D. FOR DISK
  539.    464    831A   8D   00   03         STA    DDEVIC
  540.    465    831D   AD   3C   80         LDA    DRVNO        ;SETUP DRIVE #
  541.    466    8320   8D   01   03         STA    DUNIT
  542.    467    8323   A9   80              LDA    #128        ;BYTE COUNT
  543.    468    8325   8D   08   03         STA    DBYTLO
  544.    469    8328                        CLR    DBYTHI
  545.    (1)    8328   A9   00      
  546.    (2)    832A   8D   09   03 
  547.    470    832D                    DSKLUP:    MOV2    POINT,DAUX1    ;SETUP SECTOR ADDRS
  548.    (1)    832D   A5   E2      
  549.    (1)    832F   8D   0A   03 
  550.    (1)    8332   A5   E3      
  551.    (1)    8334   8D   0B   03 
  552.    471    8337   20   53   E4         CALL    DSKINV        ;INVOKE DISK HANDLER
  553.    472    833A   30   16              BMI    IOCERR        ;ERROR CODE IS .GE. $80
  554.    473    833C   20   58   86         CALL    ENDCHK        ;CHECK END, INCR POINT
  555.    474    833F   18                   CLC            ;NOT END - STEP TO NEXT BUFFER
  556.    475    8340   A9   80              LDA    #128        ;128 BYTE/BUFFER
  557.    476    8342   6D   04   03         ADC    DBUFLO
  558.    477    8345   8D   04   03         STA    DBUFLO
  559.    478    8348   A9   00              LDA    #0        ;PROPAGATE CARRY
  560.    479    834A   6D   05   03         ADC    DBUFHI
  561.    480    834D   8D   05   03         STA    DBUFHI
  562.    481    8350   D0   DB              BNE    DSKLUP        ;LOOP TILL DONE
  563.    482                        
  564.    483    8352   20   DF   80     IOCERR:    CALL    ERRFST        ;OUT <BELL>?
  565.    484    8355   20   6B   87         CALL    OUTSSP
  566.    485    8358   AD   03   03         LDA    DSTATS        ;GET STATUS
  567.    486    835B   20   91   87         CALL    PRTSBY        ;PRINT ERROR CODE
  568.    487    835E   20   62   87         CALL    PRBLNK        ;SOME BLANKS
  569.    488    8361   20   8A   87         CALL    PRTSPT        ; THEN DISK ADDRS
  570.    489    8364   4C   9D   80         JMP    DCD        ;RETURN
  571.    490                        
  572. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 11
  573. ALBUG.M65
  574.  
  575.    492                            ;$F - FIND A BYTE IN MEMORY
  576.    493                        
  577.    494    8367   20   6A   86     FIND:    CALL    GETVAL        ;GET THE BYTE
  578.    495    836A   20   3E   86         CALL    INTPTC        ;SET UP INDIRECT POINTER FROM START
  579.    496    836D   A9   01              LDA    #1
  580.    497    836F   8D   2A   80         STA    ROF        ;SET THE MODE FLAG
  581.    498    8372   A0   00          10$:    LDY    #0        ;SET UP INDEX
  582.    499    8374   B1   E2              LDA    (POINT),Y    ;GET BYTE FROM MEMORY
  583.    500    8376   C5   E0              CMP    INBUF        ;DOES IT MATCH
  584.    501    8378   D0   08              BNE    20$        ;NO
  585.    502    837A   A2   5B              LDX    #'[        ;SLASH
  586.    503    837C   20   25   87         CALL    PRTSLC        ;GO PRINT THE CONTENTS
  587.    504    837F   20   85   87         CALL    CRLFS        ;PUT OUT CARRIAGE RETURN LINE FEED
  588.    505    8382   20   58   86     20$:    CALL    ENDCHK        ;ARE WE FINISHED
  589.    506    8385   4C   72   83         JMP    10$        ;NO
  590.    507                        
  591.    508                        
  592.    509                            ;$G - START SOMEWHERE
  593.    510                        
  594.    511    8388   20   3E   86     GO:    CALL    INTPTC        ;GO SETUP ADDRESS
  595.    512    838B                        CLR    <BPN,SNGLF>    ;CLEAR CURRENT BP
  596.    (1)    838B   A9   00      
  597.    (2)    838D   8D   3B   80 
  598.    (2)    8390   8D   3A   80 
  599.    513    8393   20   5C   88     GO2:    CALL    INSB        ;INSERT BP'S
  600.    514    8396   A6   E8          GO3:    LDX    SP        ;RESTORE STACK
  601.    515    8398   9A                   TXS
  602.    516    8399   A5   E3              LDA    POINT+1        ;SETUP RETURN ADDRS
  603.    517    839B   48                   PHA            ; ON STACK FOR RTI
  604.    518    839C   A5   E2              LDA    POINT
  605.    519    839E   48                   PHA            ;...
  606.    520    839F   A5   E7              LDA    PS        ;PROCESSOR STATUS
  607.    521    83A1   48                   PHA
  608.    522    83A2   A6   E5              LDX    XREG        ;RESTORE REGS
  609.    523    83A4   A4   E6              LDY    YREG
  610.    524    83A6   A5   E4              LDA    AC        ;...
  611.    525    83A8   40                   RTI            ;GO BACK
  612.    526                        
  613.    527                            ;HERE IF SINGLE STEP - SETUP FOR RE-ENTER AFTER XCT
  614.    528                        
  615.    529    83A9   AC   4F   85     GO1:    LDY    IOPC        ;CHECK FOR JUMPS
  616.    530    83AC   C0   4C              CPY    #$4C
  617.    531    83AE   F0   0E              BEQ    GOJMP        ;VANILLA JUMP
  618.    532    83B0   C0   6C              CPY    #$6C        ;MAYBE JUMP, INDIRECT
  619.    533    83B2   F0   14              BEQ    GOJMPI        ; A LITTLE MORE HAIRY
  620.    534    83B4   C0   60              CPY    #$60        ;"RTS"?
  621.    535    83B6   F0   2A              BEQ    IRTS        ; INTERPRET SUBROUTINE RETURN
  622.    536    83B8   C0   40              CPY    #$40        ;"RTI"
  623.    537    83BA   F0   43              BEQ    IRTI        ; INTERPRET INTERRUPT RETURN
  624.    538    83BC   D0   D8              BNE    GO3        ; AND GO EXECUTE
  625.    539                        
  626.    540    83BE                    GOJMP:    SET2    XCTBR,POINT    ;EXECUTE HERE
  627.    (1)    83BE   A9   6C      
  628.    (1)    83C0   85   E2      
  629.    (1)    83C2   A9   85      
  630.    (1)    83C4   85   E3      
  631.    541    83C6   D0   CE              BNE    GO3
  632.    542                        
  633.    543    83C8                    GOJMPI:    MOV2    XBTARG,POINT    ;NEED TO PICK UP ACTUAL TARGET
  634.    (1)    83C8   AD   7B   85 
  635.    (1)    83CB   85   E2      
  636.    (1)    83CD   AD   7C   85 
  637.    (1)    83D0   85   E3      
  638.    544    83D2   A0   00              LDY    #0
  639.    545    83D4   B1   E2              LDA    (POINT),Y
  640.    546    83D6   8D   7B   85         STA    XBTARG        ;AND SET UP FOR "BRANCH" SIMULATION
  641.    547    83D9   C8                   INY            ;SET TO NEXT LOC
  642.    548    83DA   B1   E2              LDA    (POINT),Y
  643.    549    83DC   8D   7C   85         STA    XBTARG+1
  644.    550    83DF   4C   BE   83         JMP    GOJMP        ;NO GO SIMULATE JMP (I)
  645.    551                        
  646.    552    83E2   A6   E8          IRTS:    LDX    SP        ;GET STACK POINTER
  647.    553    83E4   9A                   TXS            ;SETUP FOR "RTS" SIMULATION
  648.    554    83E5   68               IRTS1:    PLA            ;PCL
  649.    555    83E6   8D   7B   85         STA    XBTARG
  650.    556    83E9   68                   PLA            ;PCH
  651. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 11-1
  652. ALBUG.M65
  653.  
  654.    557    83EA   8D   7C   85         STA    XBTARG+1
  655.    558    83ED   C0   40              CPY    #$40        ;IS THIS SUBR OR INTERRUPT
  656.    559    83EF   F0   08              BEQ    10$        ;DON'T INCREMENT PC IF "RTI"
  657.    560    83F1   EE   7B   85         INC    XBTARG        ;"RTS" NEED PC + 1
  658.    561    83F4   D0   03              BNE    10$
  659.    562    83F6   EE   7C   85         INC    XBTARG+1
  660.    563    83F9   BA               10$:    TSX            ;SAVE MODIFIED STACK PNTR
  661.    564    83FA   86   E8              STX    SP
  662.    565    83FC   4C   BE   83         JMP    GOJMP
  663.    566                        
  664.    567    83FF   A6   E8          IRTI:    LDX    SP        ;SETUP STACK POINTER
  665.    568    8401   9A                   TXS
  666.    569    8402   68                   PLA            ;GET PROCESSOR STATUS
  667.    570    8403   85   E7              STA    PS
  668.    571    8405   4C   E5   83         JMP    IRTS1        ;GOIN COMMON CODE
  669.    572                        
  670. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 12
  671. ALBUG.M65
  672.  
  673.    574                            ;$H - HEX DUMP TO TTY
  674.    575                        
  675.    576    8408   20   41   86     HDUMP:    CALL    INTPT        ;SET UP START AND END ADDRESS
  676.    577    840B   A5   E2              LDA    POINT        ;GET LOW PART OF ADDRESS
  677.    578    840D   29   F0              AND    #$F0        ;MAKE IT START ON A NICE BOUNDRY
  678.    579    840F   85   E2              STA    POINT
  679.    580    8411   20   A4   85     10$:    CALL    SETOUT        ;SETUP OUTPUT DEVICE / GET LPP
  680.    581    8414   8D   2E   80         STA    LENGTH        ; SAVE IT AWAY
  681.    582    8417   20   85   87     20$:    CALL    CRLFS        ;PRINT OUT CARRAGE RETURN LINEFEED
  682.    583    841A   20   8A   87         CALL    PRTSPT        ;PRINT OUT THE LOCATION
  683.    584    841D   A9   10              LDA    #$10        ;NUMBER OF BYTES PER LINE
  684.    585    841F   20   47   87         CALL    DMPLIN        ;PRINT A LINE OF DUMP
  685.    586    8422   20   58   86         CALL    ENDCHK        ;CHECK TO SEE IF WE ARE FINISHED
  686.    587    8425   CE   2E   80         DEC    LENGTH        ;COUNT LINE
  687.    588    8428   D0   ED              BNE    20$        ;GO DO ANOTHER LINE
  688.    589    842A   20   DB   86         CALL    PAGEWT        ;GO WAIT FOR CONTINUE
  689.    590    842D   4C   11   84         JMP    10$        ;GO DO ANOTHER PAGE
  690. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 13
  691. ALBUG.M65
  692.  
  693.    592                            ;$I - INITIALIZE MEMORY
  694.    593                        
  695.    594    8430   20   6A   86     INIT:    CALL    GETVAL        ;GET VALUE
  696.    595    8433   A6   E0              LDX    INBUF        ;GET BYTE INTO X
  697.    596    8435   20   3E   86     INITM1:    CALL    INTPTC        ;SET UP ADDRESSES
  698.    597    8438   8A               10$:    TXA            ;GET CHARACTER BACK
  699.    598    8439   A0   00              LDY    #0        ;SET UP FOR INDEXING
  700.    599    843B   91   E2              STA    (POINT),Y    ;SET MEMORY TO SPECIFIED VALUE
  701.    600    843D   20   58   86         CALL    ENDCHK        ;CHECK TO SEE IF FINISHED
  702.    601    8440   4C   38   84         JMP    10$        ;NO GO DO ANOTHER VALUE
  703.    602                        
  704.    603                        
  705.    604                            ;$Z - ZERO MEMORY
  706.    605                        
  707.    606    8443   A2   00          ZERO:    LDX    #0        ;GET A ZERO
  708.    607    8445   F0   EE              BEQ    INITM1        ;GO INITIALIZE MEMORY
  709.    608                        
  710.    609                            ;$M - MOVE A BLOCK OF STORE
  711.    610                        
  712.    611    8447   A9   8D          MOVE:    LDA    #$8D        ;GET STORE OPCODE
  713.    612    8449   20   BB   87         CALL    INTIVB        ;SET UP STORE AND RETURN IN VEB
  714.    613    844C   20   6A   86         CALL    GETVAL        ;GET TO ADDRESS
  715.    614    844F   20   41   86         CALL    INTPT        ;SET UP POINT FROM START
  716.    615    8452                        MOV2    INBUF,VEB+1    ;SET UP ADDRESS
  717.    (1)    8452   A5   E0      
  718.    (1)    8454   8D   31   80 
  719.    (1)    8457   A5   E1      
  720.    (1)    8459   8D   32   80 
  721.    616    845C   A0   00          10$:    LDY    #0        ;SET UP FOR INDEXING
  722.    617    845E   B1   E2              LDA    (POINT),Y    ;GET BYTE
  723.    618    8460   20   30   80         CALL    VEB        ;STORE IT AT NEW ADDRESS
  724.    619    8463   20   D7   87         CALL    INCVEB        ;BUMP THE VEB POINTER
  725.    620    8466   20   58   86         CALL    ENDCHK        ;FINISHED?
  726.    621    8469   4C   5C   84         JMP    10$        ;NO
  727.    622                        
  728.    623                            ;$L -  PRINTER SELECT TOGGLE
  729.    624                        
  730.    625    846C   AD   34   80     PNTSEL:    LDA    STARTA        ;COMPLIMENT PRINTER FLAG
  731.    626    846F   8D   3E   80         STA    PNTF
  732.    627    8472   4C   AA   82         JMP    BPXIT        ;RETURN TO MAIN LOOP
  733. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 14
  734. ALBUG.M65
  735.  
  736.    629                            ;$O - CALCULATE BRANCH OFFSET
  737.    630                        
  738.    631    8475   20   62   87     OFFSET:    CALL    PRBLNK        ;PUT OUT SOME BLANKS
  739.    632    8478   18                   CLC            ;MAKE FROM BE ONE MORE
  740.    633    8479   AD   36   80         LDA    ENDAD        ;GET FIRST OF TO ADDRESS
  741.    634    847C   ED   34   80         SBC    STARTA        ;SUBTRACT FROM ADDRESS
  742.    635    847F   AA                   TAX            ;SAVE LOW ORDER PART OF ADDRESS
  743.    636    8480   AD   37   80         LDA    ENDAD+1        ;GET HIGH PART OF TO ADDRESS
  744.    637    8483   ED   35   80         SBC    STARTA+1    ;SUBTRACT FROM ADDRESS
  745.    638    8486   A8                   TAY            ;SAVE HIGH ORDER BYTE
  746.    639    8487   D0   05              BNE    10$        ;IF IT IS ZERO MAY BE LEGAL ADDRESS
  747.    640    8489   8A                   TXA            ;GET LOW PART BACK
  748.    641    848A   10   0D              BPL    30$        ;VALID ADDRESS
  749.    642    848C   30   07              BMI    20$        ;ELSE ILLEGAL ADDRESS
  750.    643    848E   C9   FF          10$:    CMP    #$FF        ;OR $FF IS LEGAL
  751.    644    8490   D0   03              BNE    20$
  752.    645    8492   8A                   TXA            ;GET LOW PART BACK
  753.    646    8493   30   04              BMI    30$        ;VALID ADDRESS
  754.    647    8495   98               20$:    TYA            ;GET HIGH ORDER BYTE
  755.    648    8496   20   91   87         CALL    PRTSBY        ;GO PRINT HIGH ORDER BYTE
  756.    649    8499   8A               30$:    TXA            ;GET LOW ORDER BYTE
  757.    650    849A   20   91   87         CALL    PRTSBY        ;PRINT LOW BYTE
  758.    651    849D   20   85   87         CALL    CRLFS        ;AND CARRIAGE RETURN LINE FEED
  759.    652    84A0   4C   AB   80         JMP    SCAN        ;GO BACK TO MAIN LOOP
  760.    653                        
  761.    654                            ;$P - PROCEED FROM BREAKPOINT
  762.    655                        
  763.    656    84A3   20   85   87     PROC:    CALL    CRLFS        ;SIGNAL START
  764.    657    84A6                        CLR    SNGLF        ;NOT SINGLE STEP
  765.    (1)    84A6   A9   00      
  766.    (2)    84A8   8D   3A   80 
  767.    658    84AB   AD   2B   80         LDA    CF        ;QUANT TYPED
  768.    659    84AE   30   07              BMI    PROC1        ;NO - PROCEED ONCE
  769.    660    84B0   AD   34   80         LDA    STARTA        ;GET LOW BYTE OF COUNT
  770.    661    84B3   F0   0E              BEQ    PERR        ;DON'T ALLOW 0$P
  771.    662    84B5   D0   02              BNE    PROC2        ;PROCEED COUNT IN AC
  772.    663                        
  773.    664    84B7   A9   01          PROC1:    LDA    #1        ;PRELOAD A ONE
  774.    665    84B9   AE   3B   80     PROC2:    LDX    BPN        ;ACTUAL BP #
  775.    666    84BC   F0   10              BEQ    IXCT        ;COULD BE FROM PANIC INT
  776.    667    84BE   9D   57   80         STA    BPCNT-1,X    ;STORE COUNT
  777.    668    84C1   D0   0B              BNE    IXCT        ;JOIN SS CODE
  778.    669                        
  779.    670    84C3   4C   9A   80     PERR:    JMP    ERR        ;HANDY BRANCH LOC
  780.    671                        
  781. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 15
  782. ALBUG.M65
  783.  
  784.    673                            ;$X - SINGLE STEP
  785.    674                        
  786.    675    84C6                    EXEC:    CLR    BPN        ;NO BREAKS IN PROGRESS
  787.    (1)    84C6   A9   00      
  788.    (2)    84C8   8D   3B   80 
  789.    676    84CB   EE   3A   80         INC    SNGLF        ;SET FLAG
  790.    677                        
  791.    678    84CE                    IXCT:    MOV2    PRPC,POINT    ;SET START ADDRESS
  792.    (1)    84CE   AD   2C   80 
  793.    (1)    84D1   85   E2      
  794.    (1)    84D3   AD   2D   80 
  795.    (1)    84D6   85   E3      
  796.    679    84D8   20   7E   89         CALL    CALCAD        ;GET LENGHT, EA, FORMAT
  797.    680    84DB                        MOV2    INBUF,XBTARG    ;SET EA TO BRANCH TARGET
  798.    (1)    84DB   A5   E0      
  799.    (1)    84DD   8D   7B   85 
  800.    (1)    84E0   A5   E1      
  801.    (1)    84E2   8D   7C   85 
  802.    681    84E5   A2   EA              LDX    #$EA        ;GET NOP
  803.    682    84E7   8E   50   85         STX    IOPC+1        ;INIT FOR 1 BYTE INSTR
  804.    683    84EA   8E   51   85         STX    IOPC+2
  805.    684    84ED   B1   E2              LDA    (POINT),Y    ;GET OPCODE
  806.    685    84EF   D0   01              BNE    5$        ;CONVERT "BRK" INTO "NOP"
  807.    686    84F1   8A                   TXA
  808.    687    84F2   8D   4F   85     5$:    STA    IOPC
  809.    688    84F5   AD   2E   80         LDA    LENGTH        ;LENGTH OF INSTR
  810.    689    84F8   F0   3D              BEQ    IXCT1        ;1 BYTE - GO NOW
  811.    690    84FA   20   D0   87         CALL    INCPT        ;MOVE TO NEXT BYTE
  812.    691    84FD   AD   2F   80         LDA    PFRMT        ;CHECK FOR BRANCH
  813.    692    8500   C9   1D              CMP    #$1D        ; INSTR
  814.    693    8502   D0   07              BNE    IXCT3        ;NOT BRANCH
  815.    694    8504   A9   1B              LDA    #XCTBR-IOPC-2    ;BRANCH - SET UP DISPLACEMENT
  816.    695    8506   8D   50   85         STA    IOPC+1        ;STORE IN OFFSET BYTE
  817.    696    8509   D0   2C              BNE    IXCT1        ;JOIN COMMON EXIT
  818.    697                        
  819.    698    850B   B1   E2          IXCT3:    LDA    (POINT),Y    ;GET NEXT BYTE
  820.    699    850D   8D   50   85         STA    IOPC+1        ;STORE IN XCT BLOCK
  821.    700    8510   AD   2E   80         LDA    LENGTH
  822.    701    8513   C9   02              CMP    #2        ;CHECK FOR 1 OR 2 EXTRA BYTES
  823.    702    8515   D0   20              BNE    IXCT1        ;ONLY 1 BYTE
  824.    703    8517   20   D0   87         CALL    INCPT        ;MOVE TO NEXT
  825.    704    851A   B1   E2              LDA    (POINT),Y    ;GET 3RD AND LAST
  826.    705    851C   8D   51   85         STA    IOPC+2
  827.    706    851F   AD   4F   85         LDA    IOPC        ;GET OPCODE BYTE
  828.    707    8522   C9   20              CMP    #$20        ;IS IT "JSR"?
  829.    708    8524   D0   11              BNE    IXCT1        ;BRANCH IF NOT
  830.    709    8526   A6   E8              LDX    SP        ;GET SAVED STACK POINTER
  831.    710    8528   9A                   TXS            ;SET STACK
  832.    711    8529   A5   E3              LDA    POINT+1        ;YES - SETUP RETURN PC
  833.    712    852B   48                   PHA
  834.    713    852C   A5   E2              LDA    POINT
  835.    714    852E   48                   PHA
  836.    715    852F   BA                   TSX            ;SAVE UPDATED POINTER
  837.    716    8530   86   E8              STX    SP        ; FOR PROCEED
  838.    717    8532   A9   4C              LDA    #$4C        ;CHANGE INTO "JMP"
  839.    718    8534   8D   4F   85         STA    IOPC
  840.    719    8537   20   D0   87     IXCT1:    CALL    INCPT        ;STEP TO INSTR AFTER THIS ONE
  841.    720    853A                        MOV2    POINT,XNOBR    ;SETUP NO BRANCH LOC
  842.    (1)    853A   A5   E2      
  843.    (1)    853C   8D   79   85 
  844.    (1)    853F   A5   E3      
  845.    (1)    8541   8D   7A   85 
  846.    721    8544                        SET2    IOPC,POINT    ;SET START ADDR TO IOPC BLOCK
  847.    (1)    8544   A9   4F      
  848.    (1)    8546   85   E2      
  849.    (1)    8548   A9   85      
  850.    (1)    854A   85   E3      
  851.    722    854C   4C   A9   83         JMP    GO1        ;AND START UP
  852.    723                        
  853.    724                            ;EXECUTE BLOCK FOR INSTR XCT SIMULATOR
  854.    725                        
  855.    726    854F   F0   1B          IOPC:    BEQ    XCTBR
  856.    727    8551   EA                   .BYTE    $EA        ;NOP
  857.    728    8552   84   E6              STY    YREG        ;SAVE NEW STATE AFTER $X
  858.    729    8554   86   E5              STX    XREG
  859.    730    8556   85   E4              STA    AC
  860. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 15-1
  861. ALBUG.M65
  862.  
  863.    731    8558   08                   PHP
  864.    732    8559   68                   PLA
  865.    733    855A   85   E7              STA    PS        ;PROCESSOR STATUS
  866.    734    855C   BA                   TSX
  867.    735    855D   86   E8              STX    SP        ;STACK POINTER
  868.    736    855F                    XCTNB:    MOV2    XNOBR,POINT    ;NO BRANCH OCCURED
  869.    (1)    855F   AD   79   85 
  870.    (1)    8562   85   E2      
  871.    (1)    8564   AD   7A   85 
  872.    (1)    8567   85   E3      
  873.    737    8569   4C   F3   88         JMP    BRKY
  874.    738                        
  875.    739    856C                    XCTBR:    MOV2    XBTARG,POINT    ;BRANCH OCCURED
  876.    (1)    856C   AD   7B   85 
  877.    (1)    856F   85   E2      
  878.    (1)    8571   AD   7C   85 
  879.    (1)    8574   85   E3      
  880.    740    8576   4C   F3   88         JMP    BRKY
  881.    741                        
  882.    742    8579 0001               XNOBR:    .BLKW    1        ;SAVED POINTERS FOR SINGLE STEP
  883.    743    857B 0001               XBTARG:    .BLKW    1
  884.    744                        
  885. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 16
  886. ALBUG.M65
  887.  
  888.    746                            ;$Q - DISASSEMBLE CODE
  889.    747                        
  890.    748    857D   20   41   86     DISASS:    CALL    INTPT        ;SET UP POINT
  891.    749    8580   20   A4   85     10$:    CALL    SETOUT        ;SET OUTPUT DEVICE
  892.    750    8583   8D   2B   80         STA    CF        ; RETURNS LINES/PAGE
  893.    751    8586   20   85   87     20$:    CALL    CRLFS        ;PUT OUT CARRIAGE RETURN LINE FEED
  894.    752    8589   20   1E   87         CALL    PRTSLS        ;GO PRINT A LINE
  895.    753    858C   20   58   86         CALL    ENDCHK        ;CHECK TO SEE IF FINISHED
  896.    754    858F   AD   2E   80         LDA    LENGTH        ;GET LENGTH OF INSTRUCTION
  897.    755    8592   18                   CLC            ;ONE ALREADY ADDED AT ENDCHK
  898.    756    8593   20   04   8A         CALL    PCADJ3        ;POINT TO NEXT INSTRUCTION
  899.    757    8596   85   E2              STA    POINT        ;SAVE UPDATED ADDRESS
  900.    758    8598   84   E3              STY    POINT+1
  901.    759    859A   CE   2B   80         DEC    CF        ;ACCOUNT FOR LINE
  902.    760    859D   D0   E7              BNE    20$        ;GO DO ANOTHER INSTRUCTION
  903.    761    859F   20   DB   86         CALL    PAGEWT        ;GO WAIT FOR GO AHEAD
  904.    762    85A2   D0   DC              BNE    10$        ;GO DO ANOTHER PAGE
  905.    763                        
  906.    764                            ;ROUTINE TO SETUP FOR OUTPUT - CHECK PNTF FOR PRINTER
  907.    765                        
  908.    766    85A4   AD   3E   80     SETOUT:    LDA    PNTF        ;WANT PRINTER?
  909.    767    85A7   F0   06              BEQ    10$
  910.    768    85A9   20   E0   87         CALL    OPENP        ;YES - OPEN IT IF NOT OPEN ALREADY
  911.    769    85AC   A9   37              LDA    #LPP        ;RETURN LINES/PAGE
  912.    770    85AE   60                   RET
  913.    771                        
  914.    772    85AF   A9   18          10$:    LDA    #LNSCR        ;LINE/SCREEN (EDITOR)
  915.    773    85B1   60                   RET
  916. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 17
  917. ALBUG.M65
  918.  
  919.    775                            ;$S - SEARCH FOR ADDRESS
  920.    776                        
  921.    777    85B2   20   6A   86     SEARCH:    CALL    GETVAL        ;GET A WORD
  922.    778    85B5                        MOV2    INBUF,VEB    ;SAVE VALUE SEARCHING FOR
  923.    (1)    85B5   A5   E0      
  924.    (1)    85B7   8D   30   80 
  925.    (1)    85BA   A5   E1      
  926.    (1)    85BC   8D   31   80 
  927.    779    85BF   20   3E   86         CALL    INTPTC        ;SET UP ADDRESSES
  928.    780    85C2   20   4C   86         CALL    DECPT        ;DECREMENT IT BY ONE
  929.    781    85C5   A0   00          10$:    LDY    #0        ;SET UP INDEX
  930.    782    85C7   B1   E2              LDA    (POINT),Y    ;GET FIRST BYTE
  931.    783    85C9   CD   30   80         CMP    VEB        ;DOES IT MATCH
  932.    784    85CC   D0   22              BNE    20$        ;NO
  933.    785    85CE   C8                   INY            ;BUMP POINTER
  934.    786    85CF   B1   E2              LDA    (POINT),Y    ;GET SECOND BYTE
  935.    787    85D1   CD   31   80         CMP    VEB+1        ;DOES IT MATCH
  936.    788    85D4   D0   1A              BNE    20$        ;NO
  937.    789    85D6   20   8A   87         CALL    PRTSPT        ;PRINT THE ADDRESS
  938.    790    85D9   A9   2F              LDA    #'/        ;PRINT SEPERATOR
  939.    791    85DB   20   6D   87         CALL    OUTSCH        ;PRINT IT
  940.    792    85DE   20   6B   87         CALL    OUTSSP        ;PUT OUT A SPACE
  941.    793    85E1   AD   31   80         LDA    VEB+1        ;GET HIGH BYTE
  942.    794    85E4   20   91   87         CALL    PRTSBY        ;PRINT THE BYTE
  943.    795    85E7   AD   30   80         LDA    VEB        ;GET LOW BYTE
  944.    796    85EA   20   91   87         CALL    PRTSBY        ;PRINT IT
  945.    797    85ED   4C   0E   86         JMP    30$        ;GO DO CARRIAGE RETURN LINE FEED
  946.    798                        
  947.    799    85F0   20   7E   89     20$:    CALL    CALCAD        ;GET EFFECTIVE ADDRESS OF INSTRUCTION
  948.    800    85F3   A5   E0              LDA    INBUF        ;GET LOW BYTE
  949.    801    85F5   CD   30   80         CMP    VEB        ;DOES IT MATCH
  950.    802    85F8   D0   17              BNE    40$        ;NO
  951.    803    85FA   A5   E1              LDA    INBUF+1        ;GET HIGH BYTE
  952.    804    85FC   CD   31   80         CMP    VEB+1        ;DOES IT MATCH
  953.    805    85FF   D0   10              BNE    40$        ;NO
  954.    806    8601   20   1E   87         CALL    PRTSLS        ;GO PRINT THE CONTENTS
  955.    807    8604   AD   2F   80         LDA    PFRMT        ;
  956.    808    8607   C9   1D              CMP    #$1D        ;CHECK TO SEE IF IT WAS A BRANCH
  957.    809    8609   F0   03              BEQ    30$        ;YES.  NO NEED TO BUMP TWO
  958.    810    860B   20   D0   87         CALL    INCPT        ;BUMP POINTER SO WE DO NOT GET ADDRESS AGAIN
  959.    811    860E   20   85   87     30$:    CALL    CRLFS        ;PUT OUT CARRIAGE RETURN LINE FEED
  960.    812    8611   20   58   86     40$:    CALL    ENDCHK        ;ARE WE FINISHED
  961.    813    8614   4C   C5   85         JMP    10$        ;NO
  962. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 18
  963. ALBUG.M65
  964.  
  965.    815                            ;$T - TYPE OUT MEMORY IN ASCII
  966.    816                        
  967.    817    8617   20   3E   86     TYPE:    CALL    INTPTC        ;SET UP ADDRESSES
  968.    818    861A   A0   00          10$:    LDY    #0        ;SET UP FOR INDEXING
  969.    819    861C   B1   E2              LDA    (POINT),Y    ;GET A CHARACTER
  970.    820    861E   20   6D   87         CALL    OUTSCH        ;PRINT THE CHARACTER
  971.    821    8621   20   58   86         CALL    ENDCHK        ;FINISHED?
  972.    822    8624   4C   1A   86         JMP    10$        ;NO
  973.    823                        
  974. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 19
  975. ALBUG.M65
  976.  
  977.    825                            ;ROUTINES DEALING WITH POINT
  978.    826                        
  979.    827                            ;REGISTER CLOSE ROUTINE
  980.    828                            ;CLOSE LOCATION AND UPDATE IF NECESSARY
  981.    829                        
  982.    830    8627   A0   00          CLSE:    LDY    #0        ;PREPARE TO MODIFY
  983.    831    8629   AD   2A   80         LDA    ROF        ;GET FLAG
  984.    832    862C   F0   0C              BEQ    CLSEX        ;XFER IF NONE OPEN
  985.    833    862E   30   0A              BMI    CLSEX        ; OR SYMBOLIC
  986.    834    8630   AD   2B   80         LDA    CF        ;ANYTHING TYPED?
  987.    835    8633   30   05              BMI    CLSEX        ;NO - DO NOTHING
  988.    836    8635   AD   34   80         LDA    STARTA        ; CURRENT OPEN REG
  989.    837    8638   91   E2              STA    (POINT),Y    ; WITH INPUT VALUE
  990.    838    863A   8C   2A   80     CLSEX:    STY    ROF        ;SET REGISTER CLOSED
  991.    839    863D   60                   RET            ;RETURN
  992.    840                        
  993.    841                        
  994.    842                            ;SET UP POINT FROM THE STARTING ADDRESS
  995.    843                        
  996.    844    863E   20   85   87     INTPTC:    CALL    CRLFS        ;PUT OUT CARRIAGE RETURN LINE FEED FIRST
  997.    845    8641                    INTPT:    MOV2    STARTA,POINT
  998.    (1)    8641   AD   34   80 
  999.    (1)    8644   85   E2      
  1000.    (1)    8646   AD   35   80 
  1001.    (1)    8649   85   E3      
  1002.    846    864B   60                   RET
  1003.    847                        
  1004.    848                        
  1005.    849                            ;DECREMENT THE PC
  1006.    850                        
  1007.    851    864C   38               DECPT:    SEC            ;PREPARE TO DECREMENT POINT
  1008.    852    864D   A5   E2              LDA    POINT
  1009.    853    864F   E9   01              SBC    #1
  1010.    854    8651   85   E2              STA    POINT
  1011.    855    8653   B0   02              BCS    10$
  1012.    856    8655   C6   E3              DEC    POINT+1        ;HANDLE BORROW
  1013.    857    8657   60               10$:    RET
  1014.    858                        
  1015.    859                        
  1016.    860                            ;CHECK TO SEE IF POINT IS AT END YET
  1017.    861                        
  1018.    862    8658   A5   E2          ENDCHK:    LDA    POINT        ;CHECK TO SEE IF FINISHED
  1019.    863    865A   CD   36   80         CMP    ENDAD
  1020.    864    865D   A5   E3              LDA    POINT+1
  1021.    865    865F   ED   37   80         SBC    ENDAD+1
  1022.    866    8662   B0   03              BCS    20$        ;IF GREATER THAN, FINISHED
  1023.    867    8664   4C   D0   87         JMP    INCPT        ;INCREMENT THE POINTER
  1024.    868                        
  1025.    869    8667   4C   9D   80     20$:    JMP    DCD        ;FINISHED GO BACK TO MAIN LOOP
  1026. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 20
  1027. ALBUG.M65
  1028.  
  1029.    871                            ;ROUTINES TO PICK UP VALUES
  1030.    872                        
  1031.    873                            ; GET ADDITIONAL VALUE, PROMPT FOR INPUT, ERROR IF NOT
  1032.    874                            ;   TERMINATED BY <EOL>
  1033.    875                        
  1034.    876    866A   20   6B   87     GETVAL:    CALL    OUTSSP        ;OUTPUT SPACE
  1035.    877    866D   A9   3A              LDA    #':        ; AND PROMPT
  1036.    878    866F   20   6D   87         CALL    OUTSCH
  1037.    879    8672   20   7C   86         CALL    GETNUM
  1038.    880    8675   C9   9B              CMP    #.ATEOL        ;TERMINATED PROPERLY?
  1039.    881    8677   F0   1E              BEQ    ABTRET        ;YES - RETURN
  1040.    882    8679   4C   9A   80         JMP    ERR        ;NOPE -ERROR
  1041.    883                        
  1042.    884                            ;GET A NUMBER RETURN WITH TERMINATOR IN A
  1043.    885                        
  1044.    886    867C                    GETNUM:    CLR2    INBUF        ;CLEAR THE BUFFER
  1045.    (1)    867C   A9   00      
  1046.    (2)    867E   85   E0      
  1047.    (2)    8680   85   E1      
  1048.    887    8682   20   A8   86         CALL    PACKCH        ;GET A CHARACTER
  1049.    888    8685   D0   08              BNE    ABTCHK        ;IF NOT HEX RETURN WITH CHARACTER IN A
  1050.    889    8687   EE   2B   80         INC    CF        ;SAY WE HAVE A NUMBER
  1051.    890    868A   20   A8   86     10$:    CALL    PACKCH        ;GO GET ANOTHER CHARACTER
  1052.    891    868D   F0   FB              BEQ    10$        ;IF HEX GO GET ANOTHER CHARACTER
  1053.    892                                ;;;    ...        ; FALL INTO ABTCHK
  1054.    893                        
  1055.    894                            ;CHECK FOR RUBOUT OR BREAK. IF FOUND RETURN TO COMMAND DECODER
  1056.    895                        
  1057.    896    868F   C9   7E          ABTCHK:    CMP    #.ATRUB        ;RUBOUT
  1058.    897    8691   F0   05              BEQ    ABORT        ;ABORT COMMAND
  1059.    898    8693   C9   80              CMP    #BRKABT        ;BREAK TYPED
  1060.    899    8695   F0   01              BEQ    ABORT
  1061.    900    8697   60               ABTRET:    RET
  1062.    901                        
  1063.    902    8698                    ABORT:    TYPE    EXES        ;PUT OUT XXX
  1064.    (1)    8698   A2   A2      
  1065.    (1)    869A   A0   86      
  1066.    (1)    869C   20   85   F3 
  1067.    903    869F   4C   A3   80         JMP    DCD4
  1068.    904                        
  1069.    905    86A2   20   20   58     EXES:    .ASCII    "  XXX"<.ATEOL>
  1070.     86A5   58   58   9B 
  1071.    906                        
  1072.    907                            ;GET A CHARACTER AND PACK IT
  1073.    908                        
  1074.    909    86A8   20   F0   86     PACKCH:    CALL    GETSCH        ;GET THE CHARACTER
  1075.    910    86AB   C9   3A              CMP    #'9+1        ;CAN IT BE A NUMBER
  1076.    911    86AD   30   10              BMI    PACK        ;YES GO TRY TO PACK IT
  1077.    912    86AF   C9   41              CMP    #'A        ;IS IT A CHARACTER
  1078.    913    86B1   30   0A              BMI    10$        ;NO.  INVALID CHARACTER RETURN
  1079.    914    86B3   C9   7E              CMP    #.ATRUB        ;RUBOUT
  1080.    915    86B5   F0   06              BEQ    10$        ;YES.  INVALID CHARACTER RETURN
  1081.    916    86B7   29   DF              AND    #@337        ;GET RID OF LOWERCASE BIT
  1082.    917    86B9   C9   47              CMP    #'F+1        ;IS IT G OR LARGER
  1083.    918    86BB   30   02              BMI    PACK        ;NO.  GO PACK IT
  1084.    919    86BD   A8               10$:    TAY            ;SIGNAL ILLEGAL CHARACTER
  1085.    920    86BE   60                   RET
  1086.    921                        
  1087.    922    86BF   C9   30          PACK:    CMP    #'0        ;CHECK FOR HEX
  1088.    923    86C1   30   17              BMI    PACKX
  1089.    924    86C3   C9   40              CMP    #'A-1        ;ADJUST FOR A-F
  1090.    925    86C5   30   03              BMI    10$
  1091.    926    86C7   18                   CLC            ;BY ADDING OFFSET
  1092.    927    86C8   69   09              ADC    #$09
  1093.    928    86CA   2A               10$:    ROL    A        ;SHIFT IN
  1094.    929    86CB   2A                   ROL    A
  1095.    930    86CC   2A                   ROL    A
  1096.    931    86CD   2A                   ROL    A
  1097.    932    86CE   A0   04              LDY    #$04        ;4 MORE SHIFTS THRU CARRY
  1098.    933    86D0   2A               20$:    ROL    A        ; TO MOVE INTO INBUF
  1099.    934    86D1   26   E0              ROL    INBUF
  1100.    935    86D3   26   E1              ROL    INBUF+1        ;RIPPLE BIT THROUGH
  1101.    936    86D5   88                   DEY            ;COUNT LOOP
  1102.    937    86D6   D0   F8              BNE    20$
  1103.    938    86D8   A9   00              LDA    #$00        ;RETURN A = 0 IF OK NUMBER
  1104.    939    86DA   60               PACKX:    RET
  1105. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 20-1
  1106. ALBUG.M65
  1107.  
  1108.    940                        
  1109.    941                            ;WAIT FOR A CHARACTER TO BE TYPED IF IT IS A RUBOUT RETURN TO COMMAND 
  1110.    942                            ;DECODER
  1111.    943                        
  1112.    944    86DB   AD   3D   80     PAGEWT:    LDA    PIOCB        ;ARE WE PRINTING?
  1113.    945    86DE   F0   05              BEQ    10$
  1114.    946    86E0   A9   0C              LDA    #@14        ;OUTPUT FF
  1115.    947    86E2   4C   6D   87         JMP    OUTSCH
  1116.    948                        
  1117.    949    86E5   A9   FD          10$:    LDA    #.ATBEL        ;GET BELL
  1118.    950    86E7   20   6D   87         CALL    OUTSCH        ;RING IT
  1119.    951    86EA   20   F0   86         CALL    GETSCH        ;WAIT FOR CHARACTER
  1120.    952    86ED   4C   8F   86         JMP    ABTCHK        ;CHECK FOR ABORT OR PROCEED
  1121.    953                        
  1122.    954                            ;ROUTINE TO GET A CARACTER
  1123.    955                            ;    RETURNS CHARACTER IN A
  1124.    956                            ;    USES Y
  1125.    957                        
  1126.    958    86F0   8E   38   80     GETSCH:    STX    TEMPX        ;SAVE X
  1127.    959    86F3   8C   39   80         STY    TEMPY        ; AND Y AROUND O/S
  1128.    960    86F6   A9   00              LDA    #0
  1129.    961    86F8   85   2A              STA    ICAX1Z        ;CLEAR FLAG
  1130.    962    86FA   20   E2   F6         CALL    KGETCH        ;RETURNS STATUS IN Y, CHAR IN A
  1131.    963    86FD   30   0A              BMI    20$        ;DON'T ECHO SPECIAL CHARS
  1132.    964    86FF   C9   7E              CMP    #.ATRUB        ;CHECK BS/DEL KEY
  1133.    965    8701   F0   0B              BEQ    30$        ; RUBOUT DOESN'T ECHO
  1134.    966    8703   C9   20              CMP    #.CHSP        ;CHECK FOR CONTROLS
  1135.    967    8705   B0   6C              BCS    OUTSCN        ; ECHO IF NOT
  1136.    968    8707   90   05              BCC    30$        ;RETURN CHAR - NO ECHO
  1137.    969                        
  1138.    970    8709   C0   80          20$:    CPY    #BRKABT        ;BREAK KEY TYPED?
  1139.    971    870B   D0   01              BNE    30$
  1140.    972    870D   98                   TYA            ;YES - RETURN BREAK FLAG
  1141.    973    870E   AE   38   80     30$:    LDX    TEMPX        ;RESTORE
  1142.    974    8711   AC   39   80         LDY    TEMPY
  1143.    975    8714   60                   RET            ; ELSE RETURN
  1144.    976                        
  1145.    977                            ;ROUTINE TO GET TWO HEX CARACTERS INTO AC
  1146.    978                            ;    RETURNS CHARACTER IN A
  1147.    979                            ;    X PRESERVED Y RETURNED = 0
  1148.    980                        
  1149.    981    8715   20   A8   86     GETSBY:    CALL    PACKCH        ;GET A CHARACTER
  1150.    982    8718   20   A8   86         CALL    PACKCH        ;GET ANOTHER CHARACTER
  1151.    983    871B   A5   E0              LDA    INBUF        ;LOAD UP BYTE
  1152.    984    871D   60                   RET
  1153. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 21
  1154. ALBUG.M65
  1155.  
  1156.    986                            ;GENERAL PURPOSE PRINTING ROUTIMES
  1157.    987                        
  1158.    988                            ;PRINT LOCATION AND IT'S CONTENETS IF FORM SPECIFIED BY ROF
  1159.    989                        
  1160.    990    871E   A9   FF          PRTSLS:    LDA    #$FF        ;SET THE TYPEOUT MODE BACK
  1161.    991    8720   8D   2A   80         STA    ROF
  1162.    992    8723   A2   2F              LDX    #'/        ;SLASH
  1163.    993    8725   20   8A   87     PRTSLC:    CALL    PRTSPT        ;PRINT CONTENTS OF POINT
  1164.    994    8728   8A                   TXA            ;GET CHAR BACK
  1165.    995    8729   20   6D   87         CALL    OUTSCH
  1166.    996    872C   20   6B   87         CALL    OUTSSP        ; AND A SPACE
  1167.    997                                ;;;    ...        ; FALL INTO PRTSCN
  1168.    998                        
  1169.    999                            ;PRINT OUT CONTENTS OF CURRENT LOCATION IN FORM SPECIFIED BY ROF
  1170.   1000                        
  1171.   1001    872F   A0   00          PRTSCN:    LDY    #0        ;SET FOR GLOBAL INDEX
  1172.   1002    8731   B1   E2              LDA    (POINT),Y    ;GET CURRENT LOCATION IN A
  1173.   1003    8733   8D   34   80         STA    STARTA        ;SAVE FOR QUOTE OR EQUAL
  1174.   1004    8736   AE   2A   80         LDX    ROF        ;SEE WHAT KIND
  1175.   1005    8739   30   06              BMI    20$        ;BR IF SYMBOLIC
  1176.   1006    873B   20   91   87         CALL    PRTSBY        ;PRINT CONTENTS
  1177.   1007    873E   4C   6B   87     10$:    JMP    OUTSSP        ;AWAIT NEXT REQUEST
  1178.   1008                        
  1179.   1009    8741   20   05   89     20$:    CALL    DSMBL        ;PRINT SYMBOLIC
  1180.   1010    8744   4C   3E   87         JMP    10$        ; AND RETURN TO CMD LOOP
  1181.   1011                        
  1182.   1012                            ;DUMP NUMBER OF LOCATIONS IN A TO SCREEN
  1183.   1013                        
  1184.   1014    8747   8D   2F   80     DMPLIN:    STA    PFRMT        ;SAVE IT
  1185.   1015    874A   20   62   87         CALL    PRBLNK        ;SPACE OVER 2
  1186.   1016    874D   F0   06              BEQ    20$        ;DO NOT INCREMENT POINTER FIRST TIME
  1187.   1017                        
  1188.   1018    874F   20   D0   87     10$:    CALL    INCPT        ;INCREMENT THE POINTER
  1189.   1019    8752   20   6B   87         CALL    OUTSSP        ;PRINT BLANK
  1190.   1020    8755   A0   00          20$:    LDY    #0        ;SET UP FOR INDEXING
  1191.   1021    8757   B1   E2              LDA    (POINT),Y    ;GET LOCATION
  1192.   1022    8759   20   91   87         CALL    PRTSBY        ;PRINT IT
  1193.   1023    875C   CE   2F   80         DEC    PFRMT        ;ACCOUNT FOR CHARACTER
  1194.   1024    875F   D0   EE              BNE    10$        ;NOT FINISHED GO DO MORE
  1195.   1025    8761   60                   RET
  1196.   1026                        
  1197.   1027                            ;OUTPUT NUMBER OF BLANKS IN X
  1198.   1028                        
  1199.   1029    8762   A2   02          PRBLNK:    LDX    #$2
  1200.   1030    8764   20   6B   87     PRBL2:    CALL    OUTSSP
  1201.   1031    8767   CA                   DEX
  1202.   1032    8768   D0   FA              BNE    PRBL2        ;LOOP TILL COUNT = 0
  1203.   1033    876A   60                   RET
  1204.   1034                        
  1205.   1035                        
  1206.   1036                            ;ROUTINE TO OUTPUT CHARACTER TO OUTPUT PORT
  1207.   1037                            ;    CHARACTER IN A
  1208.   1038                        
  1209.   1039                            ;    USES Y AND RETURNS CHARACTER IN A
  1210.   1040                        
  1211.   1041    876B   A9   20          OUTSSP:    LDA    #.CHSP        ;LOAD UP A BLANK
  1212.   1042    876D   8E   38   80     OUTSCH:    STX    TEMPX        ;SAVE X & Y AROUND O/S CALLS
  1213.   1043    8770   8C   39   80         STY    TEMPY
  1214.   1044    8773   48               OUTSCN:    PHA            ;SAVE THE CHARACTER
  1215.   1045    8774   A8                   TAY            ; AND MOVE TO Y
  1216.   1046    8775   AE   3D   80         LDX    PIOCB        ;GET IOCB INDEX
  1217.   1047    8778   A9   0B              LDA    #PUTCHR        ;1 CHAR OUTPUT
  1218.   1048    877A   20   10   88         CALL    CIOC        ;OUTPUT TO EDITOR/PRINTER
  1219.   1049    877D   AE   38   80         LDX    TEMPX        ;RESTORE X
  1220.   1050    8780   AC   39   80         LDY    TEMPY        ;RESTORE Y
  1221.   1051    8783   68                   PLA
  1222.   1052    8784   60                   RET
  1223.   1053                        
  1224. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 22
  1225. ALBUG.M65
  1226.  
  1227.   1055                            ;ROUTINE TO WRITE OUT CARRIAGE RETURN LINE FEED
  1228.   1056                            ;    USES A AND Y
  1229.   1057                        
  1230.   1058    8785   A9   9B          CRLFS:    LDA    #.ATEOL
  1231.   1059    8787   4C   6D   87         JMP    OUTSCH        ;WRITE IT OUT AND RETURN
  1232.   1060                        
  1233.   1061                            ;ROUTINE TO PRINT CURRENT LOCATION
  1234.   1062                            ;    PRINTS POINT
  1235.   1063                            ;    USES A AND Y
  1236.   1064                        
  1237.   1065    878A   A5   E3          PRTSPT:    LDA    POINT+1        ;GET HIGH ORDER BYTE
  1238.   1066    878C   20   91   87         CALL    PRTSBY
  1239.   1067    878F   A5   E2              LDA    POINT        ;GET LOW ORDER BYTE 
  1240.   1068                                ;;;    ...        ;FALL INTO PRTSBY
  1241.   1069                        
  1242.   1070                            ;ROUTINE TO PRINT BYTE AS TWO HEX DIGITS
  1243.   1071                            ;    BYTE IS IN A
  1244.   1072                        
  1245.   1073    8791   48               PRTSBY:    PHA            ;SAVE THE BYTE
  1246.   1074    8792   4A                   LSR    A        ;GET HIGH ORDER FOUR BITS
  1247.   1075    8793   4A                   LSR    A
  1248.   1076    8794   4A                   LSR    A
  1249.   1077    8795   4A                   LSR    A
  1250.   1078    8796   20   9A   87         CALL    HEXSTA        ;GO CONVERT IT TO HEX
  1251.   1079    8799   68                   PLA            ;GET THE ORGINAL BYTE BACK
  1252.   1080                                ;;;    ...        ; FALL INTO HEXSTA
  1253.   1081                        
  1254.   1082                        
  1255.   1083                            ;ROUTINE TO CONVERT A HEX DIGIT TO ASCII
  1256.   1084                            ;    DIGIT IS IN A
  1257.   1085                        
  1258.   1086    879A   29   0F          HEXSTA:    AND    #$0F        ;GET JUST ONE DIGIT
  1259.   1087    879C   C9   0A              CMP    #$0A        ;IS IT A DECIMAL DIGIT
  1260.   1088    879E   18                   CLC            ;CLEAR THE CARRY
  1261.   1089    879F   30   02              BMI    HEXST1        ;IF NEGATIVE IT IS A DECIMAL DIGIT
  1262.   1090    87A1   69   07              ADC    #$07        ;ADD IN OFFSET TO GET A-F
  1263.   1091    87A3   69   30          HEXST1:    ADC    #$30        ;CONVERT TO ASCII
  1264.   1092    87A5   4C   6D   87         JMP    OUTSCH        ;GOT WRITE CHARACTER AND RETURN
  1265. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 23
  1266. ALBUG.M65
  1267.  
  1268.   1094                            ; MISC ROUTINES
  1269.   1095                        
  1270.   1096    87A8   D8               INITS:    CLD            ;CLEAR DECIMAL MODE
  1271.   1097    87A9   A9   02              LDA    #LEDGE        ;SET DEFAULT MARGINS
  1272.   1098    87AB   85   52              STA    LMARGN
  1273.   1099    87AD   A9   27              LDA    #REDGE
  1274.   1100    87AF   85   53              STA    RMARGN
  1275.   1101    87B1   A9   94              LDA    #$94        ;SETUP BACKGROUND COLOR
  1276.   1102    87B3   8D   C8   02         STA    COLOR4        ;TO BE SAME AS FOREGROUND
  1277.   1103    87B6   4C   2E   88         JMP    CLOSEP        ;CLOSE PRINTER IF OPEN
  1278.   1104                        
  1279.   1105                            ;SET UP VEB AREA
  1280.   1106                        
  1281.   1107    87B9   A9   AD          INTSVB:    LDA    #$AD        ;LDA OP CODE
  1282.   1108    87BB   8D   30   80     INTIVB:    STA    VEB
  1283.   1109    87BE   AD   34   80     INTVEB:    LDA    STARTA        ;SET UP SUB
  1284.   1110    87C1   8D   31   80         STA    VEB+1
  1285.   1111    87C4   AD   35   80         LDA    STARTA+1
  1286.   1112    87C7   8D   32   80         STA    VEB+2
  1287.   1113    87CA   A9   60              LDA    #$60        ;"RTS"
  1288.   1114    87CC   8D   33   80         STA    VEB+3
  1289.   1115    87CF   60                   RET
  1290.   1116                        
  1291.   1117                            ;ROUTINE TO INCRENT POINT
  1292.   1118                        
  1293.   1119    87D0                    INCPT:    INC2    POINT
  1294.    (1)    87D0   E6   E2      
  1295.    (1)    87D2   D0   02      
  1296.    (1)    87D4   E6   E3      
  1297.   1120    87D6   60                   RET
  1298.   1121                        
  1299.   1122                            ;ROUTINE TO INCREMENT ADDRS IN VEB
  1300.   1123                        
  1301.   1124    87D7                    INCVEB:    INC2    VEB+1
  1302.    (1)    87D7   EE   31   80 
  1303.    (1)    87DA   D0   03      
  1304.    (1)    87DC   EE   32   80 
  1305.   1125    87DF   60               INCRET:    RET
  1306. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 24
  1307. ALBUG.M65
  1308.  
  1309.   1127                            ;PRINTER ROUTINES
  1310.   1128                        
  1311.   1129    87E0   AD   3D   80     OPENP:    LDA    PIOCB        ;CHECK IF ALREADY OPEN
  1312.   1130    87E3   D0   FA              BNE    INCRET        ;YES - DON'T REOPEN
  1313.   1131    87E5   A2   10              LDX    #$10        ;START AT IOCB#1
  1314.   1132    87E7   BD   40   03     5$:    LDA    ICHID,X        ;GET ID
  1315.   1133    87EA   C9   FF              CMP    #$FF        ;FREE?
  1316.   1134    87EC   F0   0E              BEQ    THSONE
  1317.   1135    87EE   E0   70              CPX    #$70        ;LAST ONE?
  1318.   1136    87F0   F0   07              BEQ    PNONE
  1319.   1137    87F2   8A                   TXA            ;STEP INDEX TO NEXT
  1320.   1138    87F3   18                   CLC
  1321.   1139    87F4   69   10              ADC    #$10
  1322.   1140    87F6   AA                   TAX            ;BACK TO X
  1323.   1141    87F7   D0   EE              BNE    5$
  1324.   1142                        
  1325.   1143    87F9   4C   9A   80     PNONE:    JMP    ERR        ;NO FREE IOCB'S
  1326.   1144                        
  1327.   1145                            ;FOUND FREE IOCB (INDEX IN X)
  1328.   1146                        
  1329.   1147    87FC   8E   3D   80     THSONE:    STX    PIOCB        ;SAVE IOCB INDEX
  1330.   1148    87FF   A9   08              LDA    #OPNOT        ;OPEN FOR OUTPUT
  1331.   1149    8801   9D   4A   03         STA    ICAX1,X
  1332.   1150    8804                        SET2    PDEV,ICBAL,X    ;POINT TO DEVICE TEXT
  1333.    (1)    8804   A9   3C      
  1334.    (1)    8806   9D   44   03 
  1335.    (1)    8809   A9   88      
  1336.    (1)    880B   9D   45   03 
  1337.   1151    880E   A9   03              LDA    #OPEN        ;OPEN COMMAND
  1338.   1152    8810   9D   42   03     CIOC:    STA    ICCOM,X        ;STORE COMMAND
  1339.   1153    8813   A9   00              LDA    #0        ;SET LENGTH TO ZERO
  1340.   1154    8815   9D   48   03         STA    ICBLL,X
  1341.   1155    8818   9D   49   03         STA    ICBLH,X
  1342.   1156    881B   98                   TYA            ;MIGHT HAVE CHARACTER
  1343.   1157    881C   20   56   E4         CALL    CIOV        ;INVOKE O/S
  1344.   1158    881F   8C   03   03         STY    DSTATS        ;PUT COMPLETION CODE HERE
  1345.   1159    8822   10   BB              BPL    INCRET        ;RETURN IF NO ERROR
  1346.   1160    8824   C0   80              CPY    #BRKABT        ;BREAK TYPED?
  1347.   1161    8826   F0   03              BEQ    10$
  1348.   1162    8828   4C   52   83         JMP    IOCERR        ;COMMON ERROR HANDLER
  1349.   1163                        
  1350.   1164    882B   4C   98   86     10$:    JMP    ABORT        ;ABORT I/O - RETURN TO TOP LEVEL
  1351.   1165                        
  1352.   1166                            ; CLOSE PRINTER IOCB
  1353.   1167                        
  1354.   1168    882E   AE   3D   80     CLOSEP:    LDX    PIOCB        ;SETUP IOCB INDEX
  1355.   1169    8831   F0   AC              BEQ    INCRET        ;RETURN IF NONE
  1356.   1170    8833                        CLR    PIOCB        ;FLAG NO PRINTER
  1357.    (1)    8833   A9   00      
  1358.    (2)    8835   8D   3D   80 
  1359.   1171    8838   A9   0C              LDA    #CLOSE        ;CLOSE COMMAND
  1360.   1172    883A   D0   D4              BNE    CIOC        ; INVOKE CIO
  1361.   1173                        
  1362.   1174    883C   50   3A   9B     PDEV:    .ASCII    "P:"<.ATEOL>
  1363.   1175                        
  1364. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 25
  1365. ALBUG.M65
  1366.  
  1367.   1177                            ;GENERAL BREAKPOINT ROUTINES
  1368.   1178                        
  1369.   1179                            ;ROUTINE TO REMOVE BREAKPOINTS
  1370.   1180                        
  1371.   1181    883F   A2   07          REMB:    LDX    #MAXBP-1    ;COUNT OF THINGS TO DO
  1372.   1182    8841   BD   50   80     5$:    LDA    BPINS,X        ;GET INSTR OR ZERO
  1373.   1183    8844   F0   05              BEQ    10$        ;NO BP IF ZERO
  1374.   1184    8846   20   4F   88         CALL    SETA        ;SET UP ADDRS
  1375.   1185    8849   91   E0              STA    (INBUF),Y    ;STORE INSTR
  1376.   1186    884B   CA               10$:    DEX
  1377.   1187    884C   10   F3              BPL    5$        ;LOOP OVER ALL
  1378.   1188    884E   60                   RET            ;RETURN
  1379.   1189                        
  1380.   1190                            ;SETUP ADDRS OF GIVEN BREAKPOINT FOR INDIRECT
  1381.   1191                            ;RETURNS INBUF WITH BPLOC,X , Y := 0
  1382.   1192                            ;PRESERVES AC
  1383.   1193                        
  1384.   1194    884F   BC   60   80     SETA:    LDY    BPLOCL,X    ;GET LOW ADDRS BYTE
  1385.   1195    8852   84   E0              STY    INBUF        ;USE THIS AS TEMP
  1386.   1196    8854   BC   68   80         LDY    BPLOCH,X    ;GET HIGH ADDRS BYTE
  1387.   1197    8857   84   E1              STY    INBUF+1
  1388.   1198    8859   A0   00              LDY    #0        ;SET FOR GLOBAL INDIRECT
  1389.   1199    885B   60                   RET            ;RETURN
  1390.   1200                        
  1391.   1201                            ;ROUTINE TO INSERT BREAKPOINTS
  1392.   1202                        
  1393.   1203    885C   A2   07          INSB:    LDX    #MAXBP-1    ;DO ALL
  1394.   1204    885E   BD   50   80     5$:    LDA    BPINS,X        ;SEE IF ACTIVE
  1395.   1205    8861   F0   0C              BEQ    10$        ;SKIP IF NO BP
  1396.   1206    8863   20   4F   88         CALL    SETA        ;SET UP ADDRS
  1397.   1207    8866   B1   E0              LDA    (INBUF),Y    ;GET OLD INSTR
  1398.   1208    8868   9D   50   80         STA    BPINS,X        ;SAVE OLD INSTR
  1399.   1209    886B   A9   00              LDA    #0        ;PUT BREAK IN PLACE
  1400.   1210    886D   91   E0              STA    (INBUF),Y    ;...
  1401.   1211    886F   CA               10$:    DEX
  1402.   1212    8870   10   EC              BPL    5$        ;LOOP TILL DONE
  1403.   1213    8872   60                   RET            ;RETURN
  1404.   1214                        
  1405.   1215                            ;INTERUPT SERVICES
  1406.   1216                        
  1407.   1217                            ;IRQ - <BRK> INSTRUCTION OR ACTUAL APPLICATION INT.
  1408.   1218                        
  1409.   1219    8873   68               BREAK:    PLA            ;AC IS ON STACK
  1410.   1220    8874   85   E4              STA    AC        ;SAVE ACCUM
  1411.   1221    8876   68                   PLA            ;PROCESSOR STATUS
  1412.   1222    8877   85   E7              STA    PS
  1413.   1223    8879   84   E6              STY    YREG        ;SAVE INDEX REGS
  1414.   1224    887B   86   E5              STX    XREG
  1415.   1225    887D   68                   PLA            ;PC LOW
  1416.   1226    887E   38                   SEC            ;DECREMENT PC TO REAL LOC
  1417.   1227    887F   E9   02              SBC    #2        ;ADJUST PC FOR ACTUAL BP LOC
  1418.   1228    8881   8D   2C   80     10$:    STA    PRPC        ;SAVE HERE FOR $P
  1419.   1229    8884   85   E2              STA    POINT        ;SAVE HERE FOR EXAMINE
  1420.   1230    8886   68                   PLA            ;PC HIGH
  1421.   1231    8887   B0   02              BCS    20$        ;CHECK BORROW
  1422.   1232    8889   E9   00              SBC    #0        ;ADJUST BY 1
  1423.   1233    888B   8D   2D   80     20$:    STA    PRPC+1
  1424.   1234    888E   85   E3              STA    POINT+1
  1425.   1235    8890   BA                   TSX            ;GET STACK PNTR
  1426.   1236    8891   86   E8              STX    SP        ; SAVE IT AWAY
  1427.   1237    8893   20   3F   88         CALL    REMB        ;REMOVE BREAKPOINTS NOW
  1428.   1238    8896   A2   08              LDX    #MAXBP        ;SEARCH FOR BPN
  1429.   1239    8898   BD   4F   80     25$:    LDA    BPINS-1,X    ;ACTIVE BP?
  1430.   1240    889B   F0   08              BEQ    30$        ;NO - SKIP TO NEXT
  1431.   1241    889D   AD   2D   80         LDA    PRPC+1        ;GET PC HIGH
  1432.   1242    88A0   DD   67   80         CMP    BPLOCH-1,X    ;MATCH?
  1433.   1243    88A3   F0   08              BEQ    35$        ;YES - TRY FOR LOW
  1434.   1244    88A5   CA               30$:    DEX            ;STEP TO NEXT
  1435.   1245    88A6   D0   F0              BNE    25$        ; MORE TO DO
  1436.   1246    88A8   8E   3B   80         STX    BPN        ;SIGNAL NO B.P.
  1437.   1247    88AB   F0   25              BEQ    BRKX        ;NONE FOUND (MAYBE PANIC)
  1438.   1248                                ;..
  1439. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 26
  1440. ALBUG.M65
  1441.  
  1442.   1250                                ;..
  1443.   1251                        
  1444.   1252    88AD   AD   2C   80     35$:    LDA    PRPC        ;GET PC LOW
  1445.   1253    88B0   DD   5F   80         CMP    BPLOCL-1,X    ;MATCH?
  1446.   1254    88B3   D0   F0              BNE    30$        ;NO - KEEP LOOKING
  1447.   1255                        
  1448.   1256                            ;ACTUAL BPN IN X
  1449.   1257                        
  1450.   1258    88B5   8E   3B   80         STX    BPN        ;SAVE BPN
  1451.   1259    88B8   BD   57   80         LDA    BPCNT-1,X    ;BREAT THIS TIME? (0)
  1452.   1260    88BB   F0   15              BEQ    BRKX        ;BREAK IF ZERO
  1453.   1261    88BD   DE   57   80         DEC    BPCNT-1,X    ;COUNT THIS TIME
  1454.   1262    88C0   F0   10              BEQ    BRKX        ; AND DO AUTO PROC (IF .NE. 0)
  1455.   1263    88C2                        CLR    SNGLF        ; NOT SINGLE STEP
  1456.    (1)    88C2   A9   00      
  1457.    (2)    88C4   8D   3A   80 
  1458.   1264    88C7                        SETXA    IXCT        ;EXIT THROUGH HERE
  1459.    (1)    88C7   A2   CE      
  1460.    (1)    88C9   A9   84      
  1461.   1265    88CB   48               BRKRTI:    PHA            ;SAVE HIGH PC
  1462.   1266    88CC   8A                   TXA            ;GET LOW
  1463.   1267    88CD   48                   PHA            ;SAVE IT TOO
  1464.   1268    88CE   A5   E7              LDA    PS
  1465.   1269    88D0   48                   PHA            ;CURRENT PROCESSOR STATUS
  1466.   1270    88D1   40                   RTI            ;DISMISS TO ROUTINE
  1467.   1271                        
  1468. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 27
  1469. ALBUG.M65
  1470.  
  1471.   1273                            ;HERE TO ENTER BREAKPOINT - CLEAR SINGLE STEP FLAG
  1472.   1274                        
  1473.   1275    88D2                    BRKX:    CLR    SNGLF        ; CLEAR SS FLAG
  1474.    (1)    88D2   A9   00      
  1475.    (2)    88D4   8D   3A   80 
  1476.   1276    88D7                        SETXA    DOBRK
  1477.    (1)    88D7   A2   DD      
  1478.    (1)    88D9   A9   88      
  1479.   1277    88DB   D0   EE              BNE    BRKRTI        ;EXIT INT TO DOBRK
  1480.   1278                        
  1481.   1279    88DD   20   85   87     DOBRK:    CALL    CRLFS        ;PUT OUT A CR/LF
  1482.   1280    88E0   A9   42              LDA    #'B        ;PRINT BN;ADDRS
  1483.   1281    88E2   20   6D   87         CALL    OUTSCH
  1484.   1282    88E5   AD   3B   80         LDA    BPN        ;MAYBE 0
  1485.   1283    88E8   20   9A   87         CALL    HEXSTA        ;TYPE LOW 4 BITS
  1486.   1284    88EB   A9   3B              LDA    #';
  1487.   1285    88ED   20   6D   87         CALL    OUTSCH
  1488.   1286    88F0   4C   BC   81         JMP    LFDS1        ;GO PRINT OUT ADDRESS AND INSTR.
  1489.   1287                        
  1490.   1288    88F3                    BRKY:    MOV2    POINT,PRPC    ;SINGLE STEP ENTRY - POINT HAS PC
  1491.    (1)    88F3   A5   E2      
  1492.    (1)    88F5   8D   2C   80 
  1493.    (1)    88F8   A5   E3      
  1494.    (1)    88FA   8D   2D   80 
  1495.   1289    88FD   AD   3A   80         LDA    SNGLF        ;WAS THIS SINGLE STEP?
  1496.   1290    8900   D0   DB              BNE    DOBRK        ; SIMULATE BREAK IF $X
  1497.   1291    8902   4C   93   83         JMP    GO2        ;ELSE - JUST PROCEED
  1498.   1292                        
  1499. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 28
  1500. ALBUG.M65    6502 DISASSEMBLER
  1501.  
  1502.   1294                                .SBTTL    6502 DISASSEMBLER
  1503.   1295                        
  1504.   1296                        
  1505.   1297    8905   20   7E   89     DSMBL:    CALL    CALCAD        ;CALCULATE EFFECTIVE ADDRESS
  1506.   1298    8908   48                   PHA            ;SAVE MNEMONIC TABLE INDEX
  1507.   1299    8909   B1   E2          PROP:    LDA    (POINT),Y    ;GET OP AND PRINT IT
  1508.   1300    890B   20   91   87         CALL    PRTSBY
  1509.   1301    890E   A2   01              LDX    #$1        ;ONE SPACE
  1510.   1302    8910   20   64   87     10$:    CALL    PRBL2
  1511.   1303    8913   CC   2E   80         CPY    LENGTH        ;PRINT INSTR (1 TO 3 BYTES)
  1512.   1304    8916   C8                   INY            ; IN A 12-CHAR FIELD
  1513.   1305    8917   90   F0              BCC    PROP
  1514.   1306    8919   A2   03              LDX    #$3        ;CHAR COUNT FOR MNEMONIC PRINT
  1515.   1307    891B   C0   04              CPY    #$4
  1516.   1308    891D   90   F1              BCC    10$
  1517.   1309    891F   68                   PLA            ;RECOVER MNEMONIC INDEX
  1518.   1310    8920   A8                   TAY
  1519.   1311    8921   B9   6E   8A         LDA    MNEML,Y
  1520.   1312    8924   8D   32   80         STA    LMNEM        ;FETCH 3-CHAR MNEMONIC
  1521.   1313    8927   B9   AE   8A         LDA    MNEMR,Y        ; (PACKED IN 2 BYTES)
  1522.   1314    892A   8D   33   80         STA    RMNEM
  1523.   1315    892D   A9   00          PRMN1:    LDA    #$0
  1524.   1316    892F   A0   05              LDY    #$5
  1525.   1317    8931   0E   33   80     PRMN2:    ASL    RMNEM
  1526.   1318    8934   2E   32   80         ROL    LMNEM        ;SHIFT 5 BITS OF CHAR INTO A
  1527.   1319    8937   2A                   ROL    A        ; (CLEARS CARRY)
  1528.   1320    8938   88                   DEY
  1529.   1321    8939   D0   F6              BNE    PRMN2
  1530.   1322    893B   69   3F              ADC    #$3F        ;ADD '?' OFFSET
  1531.   1323    893D   20   6D   87         CALL    OUTSCH
  1532.   1324    8940   CA                   DEX
  1533.   1325    8941   D0   EA              BNE    PRMN1
  1534.   1326    8943   20   62   87         CALL    PRBLNK        ;PRINT 3 BLANKS
  1535.   1327    8946   A2   06              LDX    #$6        ;COUNT FOR 6 PRINT FORMAT BITS
  1536.   1328    8948   E0   03          PRADR1:    CPX    #$3
  1537.   1329    894A   D0   1B              BNE    PRADR3        ;IF X=3 THEN PRINT ADDRESS VAL
  1538.   1330    894C   AC   2E   80         LDY    LENGTH
  1539.   1331    894F   F0   16              BEQ    PRADR3        ;NO PRINT IF LENGTH=0
  1540.   1332    8951   AD   2F   80         LDA    PFRMT
  1541.   1333    8954   C9   E8              CMP    #$E8        ;HANDLE REL ADDRESSING MODE
  1542.   1334    8956   D0   06              BNE    PRADR2        ;IF NOT DO NOT ADJUST NUMBER OF BYTES
  1543.   1335    8958   C8                   INY            ;IF RELATIVE BRANCH PRINT 2 BYTES
  1544.   1336    8959                        CLR    PFRMT        ;CLEAR PFRMT
  1545.    (1)    8959   A9   00      
  1546.    (2)    895B   8D   2F   80 
  1547.   1337    895E   B9   DF   00     PRADR2:    LDA    INBUF-1,Y    ;SPECIAL (PRINT TARGET ADDRS)
  1548.   1338    8961   20   91   87         CALL    PRTSBY        ;OUTPUT 1 OR 2 BYTE ADDRS
  1549.   1339    8964   88                   DEY            ; MSB FIRST
  1550.   1340    8965   D0   F7              BNE    PRADR2
  1551.   1341    8967   0E   2F   80     PRADR3:    ASL    PFRMT        ;TEST NEXT PRINT FORMAT BIT
  1552.   1342    896A   90   0E              BCC    PRADR4        ;IF 0, DON'T PRINT
  1553.   1343    896C   BD   61   8A         LDA    CHAR1-1,X    ; CORRESPONDING CHARS
  1554.   1344    896F   20   6D   87         CALL    OUTSCH        ;OUTPUT 1 OR 2 CHARS
  1555.   1345    8972   BD   67   8A         LDA    CHAR2-1,X    ; (IF CHAR FROM CHAR2 IS 0,
  1556.   1346    8975   F0   03              BEQ    PRADR4        ;  DON'T OUTPUT IT)
  1557.   1347    8977   20   6D   87         CALL    OUTSCH
  1558.   1348    897A   CA               PRADR4:    DEX
  1559.   1349    897B   D0   CB              BNE    PRADR1
  1560.   1350    897D   60                   RET
  1561.   1351                        
  1562.   1352                        
  1563.   1353                            ;SET UP LENGTH, PFRMT AND EFFECTIV ADDRESS
  1564.   1354                            ;    RETURNS INDEX INTO MNEMONIC TABLES IN A AND 0 IN Y
  1565.   1355                        
  1566.   1356    897E   A0   00          CALCAD:    LDY    #0        ;SET UP FOR INDEXING
  1567.   1357    8980   84   E1              STY    INBUF+1        ;ZERO HIGH BYTE OF ADDRESS IN CASE ONLY ONE BYTE
  1568.   1358    8982   B1   E2              LDA    (POINT),Y    ;GET OPCODE
  1569.   1359    8984   A8                   TAY            ;SAVE IN Y
  1570.   1360    8985   4A                   LSR    A        ; EVEN/ODD TEST
  1571.   1361    8986   90   0B              BCC    IEVEN
  1572.   1362    8988   4A                   LSR    A        ; TEST B1
  1573.   1363    8989   B0   17              BCS    IERR        ; XXXXXX11 INSTR INVALID
  1574.   1364    898B   C9   22              CMP    #$22
  1575.   1365    898D   F0   13              BEQ    IERR        ; 10001001 INSTR INVALID
  1576.   1366    898F   29   07              AND    #$7        ;MASK 3 BITS FOR ADDRS MODE
  1577.   1367    8991   09   80              ORA    #$80        ; ADD INDEXING OFFSET.
  1578. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 28-1
  1579. ALBUG.M65    6502 DISASSEMBLER
  1580.  
  1581.   1368    8993   4A               IEVEN:    LSR    A        ;LSB INTO CARRY FOR
  1582.   1369    8994   AA                   TAX            ; LEFT/RIGHT TEST BELOW.
  1583.   1370    8995   BD   10   8A         LDA    MODE1,X        ;INDEX INTO ADDRS MODE TABLE
  1584.   1371    8998   B0   04              BCS    RTMODE        ;IF CARRY SET USE LSD FOR
  1585.   1372    899A   4A                   LSR    A        ; PRINT FORMAT INDEX.
  1586.   1373    899B   4A                   LSR    A
  1587.   1374    899C   4A                   LSR    A
  1588.   1375    899D   4A                   LSR    A        ; IF CARRY CLEAR, USE MSD
  1589.   1376    899E   29   0F          RTMODE:    AND    #$F        ;MASK FOR 4-BIT INDEX
  1590.   1377    89A0   D0   04              BNE    GETFMT        ; 0 FOR INVALID OPCODES
  1591.   1378    89A2   A0   80          IERR:    LDY    #$80        ;SUBSTITUTE $80 FOR INVALID OP.
  1592.   1379    89A4   A9   00              LDA    #$0        ;SET PRINT FORMAT TO 0
  1593.   1380    89A6   AA               GETFMT:    TAX
  1594.   1381    89A7   BD   54   8A         LDA    MODE2,X        ;INDEX INTO PRINT FORMAT TABLE
  1595.   1382    89AA   8D   2F   80         STA    PFRMT        ;SAVE FOR ADDRESS FIELD FORMAT
  1596.   1383    89AD   29   03              AND    #$3        ;MASK 2-BIT LENGTH 0 = 1-BYTE,
  1597.   1384    89AF   8D   2E   80         STA    LENGTH        ; 1 = 2-BYTE, 2 = 3-BYTE.
  1598.   1385    89B2   98                   TYA            ;RESTORE OP CODE
  1599.   1386    89B3   48                   PHA            ;SAVE OPCODE ON STACK
  1600.   1387    89B4   AC   2E   80         LDY    LENGTH        ;GET LENGTH
  1601.   1388    89B7   F0   13              BEQ    10$        ;IF ZERO SET CURRENT ADDRESS IN INBUF FOR TAB
  1602.   1389    89B9   B1   E2              LDA    (POINT),Y    ;GET FIRST BYTE OF ADDRESS
  1603.   1390    89BB   C0   01              CPY    #1        ;IS IT A 2 BYTE INSTRUCTION
  1604.   1391    89BD   D0   16              BNE    20$        ;NO GO PRINT BOTH BYTES
  1605.   1392    89BF   E0   0D              CPX    #13        ;WAS INDEX TO MODE2 FOR RELATIVE
  1606.   1393    89C1   D0   17              BNE    30$        ;NO GO DO JUST ONE BYTE
  1607.   1394    89C3   20   F7   89         CALL    RELADR        ;GO CALCULATE RELATIVE ADDRESS
  1608.   1395    89C6   84   E1              STY    INBUF+1        ;SAVE HIGH ORDER BYTE
  1609.   1396    89C8   8A                   TXA            ;GET LOW ORDER BYTE BACK
  1610.   1397    89C9   4C   DA   89         JMP    30$        ;GO FINISH UP
  1611.   1398                        
  1612.   1399    89CC   A5   E3          10$:    LDA    POINT+1        ;GET HIGH ORDER BYTE OF ADDRESS
  1613.   1400    89CE   85   E1              STA    INBUF+1        ;AND SAVE IT
  1614.   1401    89D0   A5   E2              LDA    POINT        ;GET LOW BYTE
  1615.   1402    89D2   4C   DA   89         JMP    30$        ;GO SAVE IT AND FINISH
  1616.   1403                        
  1617.   1404    89D5   85   E1          20$:    STA    INBUF+1        ;SAVE HIGH BYTE OF ADDRESS
  1618.   1405    89D7   88                   DEY            ;SET TO GET LOW ORDER BYTE
  1619.   1406    89D8   B1   E2              LDA    (POINT),Y    ;GET LOW BYTE
  1620.   1407    89DA   85   E0          30$:    STA    INBUF        ;SAVE LOW BYTE OF ADDRESS
  1621.   1408    89DC   68                   PLA            ;GET OPCODE BACK
  1622.   1409    89DD   A8                   TAY            ;AND SAVE IT IN Y
  1623.   1410    89DE   29   8F              AND    #$8F        ;MASK IT FOR 1XXX1010 TEST
  1624.   1411    89E0   AA                   TAX            ; AND SAVE IT.
  1625.   1412    89E1   98                   TYA            ;OPCODE AGAIN
  1626.   1413    89E2   A0   03              LDY    #$3
  1627.   1414    89E4   E0   8A              CPX    #$8A
  1628.   1415    89E6   F0   0B              BEQ    60$
  1629.   1416    89E8   4A               40$:    LSR    A
  1630.   1417    89E9   90   08              BCC    60$        ;FORM INDEX INTO MNEMONIC TABLE
  1631.   1418    89EB   4A                   LSR    A
  1632.   1419    89EC   4A               50$:    LSR    A        ; 1XXX1010 -> 00101XXX
  1633.   1420    89ED   09   20              ORA    #$20        ; XXXYYY01 -> 00111XXX
  1634.   1421    89EF   88                   DEY            ; XXXYYY10 -> 00110XXX
  1635.   1422    89F0   D0   FA              BNE    50$        ; XXXYY100 -> 00100XXX
  1636.   1423    89F2   C8                   INY            ; XXXXX000 -> 000XXXXX
  1637.   1424    89F3   88               60$:    DEY
  1638.   1425    89F4   D0   F2              BNE    40$
  1639.   1426    89F6   60                   RET
  1640.   1427                        
  1641.   1428                        
  1642.   1429                            ;HERE TO HANDLE RELATIVE BRANCH ADDRS
  1643.   1430                        
  1644.   1431    89F7   20   04   8A     RELADR:    CALL    PCADJ3        ;PCL,H + DISPL + 1 TO A,Y
  1645.   1432    89FA   AA                   TAX
  1646.   1433    89FB   E8                   INX
  1647.   1434    89FC   D0   01              BNE    10$        ;    +1 TO X,Y
  1648.   1435    89FE   C8                   INY
  1649.   1436    89FF   60               10$:    RET
  1650. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 29
  1651. ALBUG.M65    6502 DISASSEMBLER
  1652.  
  1653.   1438                            ;ADD LENGTH TO POINT
  1654.   1439                        
  1655.   1440    8A00   AD   2E   80     PCADJ:    LDA    LENGTH        ;0=1-BYTE, 1=2-BYTE, 2=3-BYTE
  1656.   1441    8A03   38                   SEC
  1657.   1442    8A04   A4   E3          PCADJ3:    LDY    POINT+1
  1658.   1443    8A06   AA                   TAX            ;TEST DISPL SIGN (FOR REL
  1659.   1444    8A07   10   01              BPL    10$        ; BRANCH). EXTEND NEG
  1660.   1445    8A09   88                   DEY            ; BY DECREMENTING PCH.
  1661.   1446    8A0A   65   E2          10$:    ADC    POINT
  1662.   1447    8A0C   90   01              BCC    20$        ;PCL+LENGTH (OR DISPL) +1 TO A.
  1663.   1448    8A0E   C8                   INY            ;CARRY INTO Y (PCH)
  1664.   1449    8A0F   60               20$:    RET
  1665.   1450                        
  1666. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 30
  1667. ALBUG.M65    6502 DISASSEMBLER
  1668.  
  1669.   1452                            ;TABLES
  1670.   1453                        
  1671.   1454    8A10   40               MODE1:    .BYTE    $40
  1672.   1455    8A11   02                   .BYTE    $2
  1673.   1456    8A12   45                   .BYTE    $45
  1674.   1457    8A13   03                   .BYTE    $3
  1675.   1458    8A14   D0                   .BYTE    $D0
  1676.   1459    8A15   08                   .BYTE    $8
  1677.   1460    8A16   40                   .BYTE    $40
  1678.   1461    8A17   09                   .BYTE    $9
  1679.   1462    8A18   30                   .BYTE    $30    ;XXXXXXZ0 INSTRS.
  1680.   1463    8A19   22                   .BYTE    $22
  1681.   1464    8A1A   45                   .BYTE    $45    ; Z=0, LEFT HALF-BYTE
  1682.   1465    8A1B   33                   .BYTE    $33    ; Z=1, RIGHT HALF-BYTE
  1683.   1466    8A1C   D0                   .BYTE    $D0
  1684.   1467    8A1D   08                   .BYTE    $8
  1685.   1468    8A1E   40                   .BYTE    $40
  1686.   1469    8A1F   09                   .BYTE    $9
  1687.   1470    8A20   40                   .BYTE    $40
  1688.   1471    8A21   02                   .BYTE    $2
  1689.   1472    8A22   45                   .BYTE    $45
  1690.   1473    8A23   33                   .BYTE    $33
  1691.   1474    8A24   D0                   .BYTE    $D0
  1692.   1475    8A25   08                   .BYTE    $8
  1693.   1476    8A26   40                   .BYTE    $40
  1694.   1477    8A27   09                   .BYTE    $9
  1695.   1478    8A28   40                   .BYTE    $40
  1696.   1479    8A29   02                   .BYTE    $2    ;(WAS 0)
  1697.   1480    8A2A   45                   .BYTE    $45    ;(WAS 40)
  1698.   1481    8A2B   B3                   .BYTE    $B3    ;(WAS B0)
  1699.   1482    8A2C   D0                   .BYTE    $D0
  1700.   1483    8A2D   08                   .BYTE    $8    ;(WAS 0)
  1701.   1484    8A2E   40                   .BYTE    $40
  1702.   1485    8A2F   09                   .BYTE    $9    ;(WAS 0)
  1703.   1486    8A30   00                   .BYTE    $0
  1704.   1487    8A31   22                   .BYTE    $22
  1705.   1488    8A32   44                   .BYTE    $44
  1706.   1489    8A33   33                   .BYTE    $33
  1707.   1490    8A34   D0                   .BYTE    $D0
  1708.   1491    8A35   8C                   .BYTE    $8C
  1709.   1492    8A36   44                   .BYTE    $44
  1710.   1493    8A37   00                   .BYTE    $0
  1711.   1494    8A38   11                   .BYTE    $11
  1712.   1495    8A39   22                   .BYTE    $22
  1713.   1496    8A3A   44                   .BYTE    $44
  1714.   1497    8A3B   33                   .BYTE    $33
  1715.   1498    8A3C   D0                   .BYTE    $D0
  1716.   1499    8A3D   8C                   .BYTE    $8C
  1717.   1500    8A3E   44                   .BYTE    $44
  1718.   1501    8A3F   9A                   .BYTE    $9A
  1719.   1502    8A40   10                   .BYTE    $10
  1720.   1503    8A41   22                   .BYTE    $22
  1721.   1504    8A42   44                   .BYTE    $44
  1722.   1505    8A43   33                   .BYTE    $33
  1723.   1506    8A44   D0                   .BYTE    $D0
  1724.   1507    8A45   08                   .BYTE    $8
  1725.   1508    8A46   40                   .BYTE    $40
  1726.   1509    8A47   09                   .BYTE    $9
  1727.   1510    8A48   10                   .BYTE    $10
  1728.   1511    8A49   22                   .BYTE    $22
  1729.   1512    8A4A   44                   .BYTE    $44
  1730.   1513    8A4B   33                   .BYTE    $33
  1731.   1514    8A4C   D0                   .BYTE    $D0
  1732.   1515    8A4D   08                   .BYTE    $8
  1733.   1516    8A4E   40                   .BYTE    $40
  1734.   1517    8A4F   09                   .BYTE    $9
  1735.   1518    8A50   62                   .BYTE    $62
  1736.   1519    8A51   13                   .BYTE    $13    ;YYXXXZ01 INSTRS.
  1737.   1520    8A52   78                   .BYTE    $78
  1738.   1521    8A53   A9                   .BYTE    $A9
  1739.   1522                        
  1740.   1523    8A54   00               MODE2:    .BYTE    $0    ;ERR
  1741.   1524    8A55   21                   .BYTE    $21    ;IMM
  1742.   1525    8A56   01                   .BYTE    $1    ;Z-PAG (WAS 81)
  1743.   1526    8A57   02                   .BYTE    $2    ;ABS (WAS 82)
  1744.   1527    8A58   00                   .BYTE    $0    ;IMPL
  1745. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 30-1
  1746. ALBUG.M65    6502 DISASSEMBLER
  1747.  
  1748.   1528    8A59   80                   .BYTE    $80    ;ACC (WAS 0)
  1749.   1529    8A5A   59                   .BYTE    $59    ;(Z-PAG,X)
  1750.   1530    8A5B   4D                   .BYTE    $4D    ;(Z-PAG),Y
  1751.   1531    8A5C   11                   .BYTE    $11    ;Z-PAG,X (WAS 91)
  1752.   1532    8A5D   12                   .BYTE    $12    ;ABS,X (WAS 92)
  1753.   1533    8A5E   06                   .BYTE    $6    ;ABS,Y (WAS 86)
  1754.   1534    8A5F   4A                   .BYTE    $4A    ;(ABS)
  1755.   1535    8A60   05                   .BYTE    $5    ;Z-PAG,Y (WAS 85)
  1756.   1536    8A61   1D                   .BYTE    $1D    ;REL (WAS 9D)
  1757.   1537                        
  1758.   1538    8A62   2C               CHAR1:    .BYTE    ',    ;COMMA
  1759.   1539    8A63   29                   .BYTE    ')    ;RPAREN
  1760.   1540    8A64   2C                   .BYTE    ',    ;COMMA
  1761.   1541    8A65   23                   .BYTE    '#    ;SHARP
  1762.   1542    8A66   28                   .BYTE    '(    ;LPAREN
  1763.   1543    8A67   41                   .BYTE    'A    ;(WAS '$)
  1764.   1544                        
  1765.   1545    8A68   59               CHAR2:    .BYTE    'Y
  1766.   1546    8A69   00                   .BYTE    0    ;NULL
  1767.   1547    8A6A   58                   .BYTE    'X
  1768.   1548    8A6B   00                   .BYTE    0    ;(WAS '$)
  1769.   1549    8A6C   00                   .BYTE    0    ;(WAS '$)
  1770.   1550    8A6D   00                   .BYTE    0
  1771.   1551                        
  1772.   1552    8A6E   1C               MNEML:    .BYTE    $1C    ;XXXXX000 INSTRS.
  1773.   1553    8A6F   8A                   .BYTE    $8A
  1774.   1554    8A70   1C                   .BYTE    $1C
  1775.   1555    8A71   23                   .BYTE    $23
  1776.   1556    8A72   5D                   .BYTE    $5D
  1777.   1557    8A73   8B                   .BYTE    $8B
  1778.   1558    8A74   1B                   .BYTE    $1B
  1779.   1559    8A75   A1                   .BYTE    $A1
  1780.   1560    8A76   9D                   .BYTE    $9D
  1781.   1561    8A77   8A                   .BYTE    $8A
  1782.   1562    8A78   1D                   .BYTE    $1D
  1783.   1563    8A79   23                   .BYTE    $23
  1784.   1564    8A7A   9D                   .BYTE    $9D
  1785.   1565    8A7B   8B                   .BYTE    $8B
  1786.   1566    8A7C   1D                   .BYTE    $1D
  1787.   1567    8A7D   A1                   .BYTE    $A1
  1788.   1568    8A7E   00                   .BYTE    $0
  1789.   1569    8A7F   29                   .BYTE    $29
  1790.   1570    8A80   19                   .BYTE    $19
  1791.   1571    8A81   AE                   .BYTE    $AE
  1792.   1572    8A82   69                   .BYTE    $69
  1793.   1573    8A83   A8                   .BYTE    $A8
  1794.   1574    8A84   19                   .BYTE    $19
  1795.   1575    8A85   23                   .BYTE    $23
  1796.   1576    8A86   24                   .BYTE    $24
  1797.   1577    8A87   53                   .BYTE    $53
  1798.   1578    8A88   1B                   .BYTE    $1B
  1799.   1579    8A89   23                   .BYTE    $23
  1800.   1580    8A8A   24                   .BYTE    $24
  1801.   1581    8A8B   53                   .BYTE    $53
  1802.   1582    8A8C   19                   .BYTE    $19
  1803.   1583    8A8D   A1                   .BYTE    $A1
  1804.   1584    8A8E   00                   .BYTE    $0    ;XXXYY100 INSTRS
  1805.   1585    8A8F   1A                   .BYTE    $1A
  1806.   1586    8A90   5B                   .BYTE    $5B
  1807.   1587    8A91   5B                   .BYTE    $5B
  1808.   1588    8A92   A5                   .BYTE    $A5
  1809.   1589    8A93   69                   .BYTE    $69
  1810.   1590    8A94   24                   .BYTE    $24
  1811.   1591    8A95   24                   .BYTE    $24
  1812.   1592    8A96   AE                   .BYTE    $AE    ;1XXX1010 INSTRS.
  1813.   1593    8A97   AE                   .BYTE    $AE
  1814.   1594    8A98   A8                   .BYTE    $A8
  1815.   1595    8A99   AD                   .BYTE    $AD
  1816.   1596    8A9A   29                   .BYTE    $29
  1817.   1597    8A9B   00                   .BYTE    $0
  1818.   1598    8A9C   7C                   .BYTE    $7C
  1819.   1599    8A9D   00                   .BYTE    $0
  1820.   1600    8A9E   15                   .BYTE    $15    ;XXXYYY10 INSTRS.
  1821.   1601    8A9F   9C                   .BYTE    $9C
  1822.   1602    8AA0   6D                   .BYTE    $6D
  1823.   1603    8AA1   9C                   .BYTE    $9C    ;(WAS 0)
  1824. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 30-2
  1825. ALBUG.M65    6502 DISASSEMBLER
  1826.  
  1827.   1604    8AA2   A5                   .BYTE    $A5
  1828.   1605    8AA3   69                   .BYTE    $69
  1829.   1606    8AA4   29                   .BYTE    $29
  1830.   1607    8AA5   53                   .BYTE    $53
  1831.   1608    8AA6   84                   .BYTE    $84    ;XXXYYY01 INSTRS.
  1832.   1609    8AA7   13                   .BYTE    $13
  1833.   1610    8AA8   34                   .BYTE    $34
  1834.   1611    8AA9   11                   .BYTE    $11
  1835.   1612    8AAA   A5                   .BYTE    $A5
  1836.   1613    8AAB   69                   .BYTE    $69
  1837.   1614    8AAC   23                   .BYTE    $23
  1838.   1615    8AAD   A0                   .BYTE    $A0
  1839.   1616                        
  1840.   1617    8AAE   D8               MNEMR:    .BYTE    $D8    ;XXXXX000 INSTRS.
  1841.   1618    8AAF   62                   .BYTE    $62
  1842.   1619    8AB0   5A                   .BYTE    $5A
  1843.   1620    8AB1   48                   .BYTE    $48
  1844.   1621    8AB2   26                   .BYTE    $26
  1845.   1622    8AB3   62                   .BYTE    $62
  1846.   1623    8AB4   94                   .BYTE    $94
  1847.   1624    8AB5   88                   .BYTE    $88
  1848.   1625    8AB6   54                   .BYTE    $54
  1849.   1626    8AB7   44                   .BYTE    $44
  1850.   1627    8AB8   C8                   .BYTE    $C8
  1851.   1628    8AB9   54                   .BYTE    $54
  1852.   1629    8ABA   68                   .BYTE    $68
  1853.   1630    8ABB   44                   .BYTE    $44
  1854.   1631    8ABC   E8                   .BYTE    $E8
  1855.   1632    8ABD   94                   .BYTE    $94
  1856.   1633    8ABE   00                   .BYTE    $0
  1857.   1634    8ABF   B4                   .BYTE    $B4
  1858.   1635    8AC0   08                   .BYTE    $8
  1859.   1636    8AC1   84                   .BYTE    $84
  1860.   1637    8AC2   74                   .BYTE    $74
  1861.   1638    8AC3   B4                   .BYTE    $B4
  1862.   1639    8AC4   28                   .BYTE    $28
  1863.   1640    8AC5   6E                   .BYTE    $6E
  1864.   1641    8AC6   74                   .BYTE    $74
  1865.   1642    8AC7   F4                   .BYTE    $F4
  1866.   1643    8AC8   CC                   .BYTE    $CC
  1867.   1644    8AC9   4A                   .BYTE    $4A
  1868.   1645    8ACA   72                   .BYTE    $72
  1869.   1646    8ACB   F2                   .BYTE    $F2
  1870.   1647    8ACC   A4                   .BYTE    $A4
  1871.   1648    8ACD   8A                   .BYTE    $8A
  1872.   1649    8ACE   00                   .BYTE    $0    ;XXXYY100 INSTRS.
  1873.   1650    8ACF   AA                   .BYTE    $AA
  1874.   1651    8AD0   A2                   .BYTE    $A2
  1875.   1652    8AD1   A2                   .BYTE    $A2
  1876.   1653    8AD2   74                   .BYTE    $74
  1877.   1654    8AD3   74                   .BYTE    $74
  1878.   1655    8AD4   74                   .BYTE    $74
  1879.   1656    8AD5   72                   .BYTE    $72
  1880.   1657    8AD6   44                   .BYTE    $44    ;1XXX1010 INSTRS.
  1881.   1658    8AD7   68                   .BYTE    $68
  1882.   1659    8AD8   B2                   .BYTE    $B2
  1883.   1660    8AD9   32                   .BYTE    $32
  1884.   1661    8ADA   B2                   .BYTE    $B2
  1885.   1662    8ADB   00                   .BYTE    $0
  1886.   1663    8ADC   22                   .BYTE    $22
  1887.   1664    8ADD   00                   .BYTE    $0
  1888.   1665    8ADE   1A                   .BYTE    $1A    ;XXXYYY10 INSTRS.
  1889.   1666    8ADF   1A                   .BYTE    $1A
  1890.   1667    8AE0   26                   .BYTE    $26
  1891.   1668    8AE1   26                   .BYTE    $26    ;(WAS 0)
  1892.   1669    8AE2   72                   .BYTE    $72
  1893.   1670    8AE3   72                   .BYTE    $72
  1894.   1671    8AE4   88                   .BYTE    $88
  1895.   1672    8AE5   C8                   .BYTE    $C8
  1896.   1673    8AE6   C4                   .BYTE    $C4
  1897.   1674    8AE7   CA                   .BYTE    $CA
  1898.   1675    8AE8   26                   .BYTE    $26
  1899.   1676    8AE9   48                   .BYTE    $48
  1900.   1677    8AEA   44                   .BYTE    $44
  1901.   1678    8AEB   44                   .BYTE    $44
  1902.   1679    8AEC   A2                   .BYTE    $A2
  1903. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 30-3
  1904. ALBUG.M65    6502 DISASSEMBLER
  1905.  
  1906.   1680    8AED   C8                   .BYTE    $C8
  1907.   1681                        
  1908. LBUG - 6502 DEBUGGER (ATARI VERSION)    CROSS 6(54)  17-OCT-83  15:59  Page 31
  1909. ALBUG.M65    6502 DISASSEMBLER
  1910.  
  1911.   1683                            ;SPECIAL SYMBOL TABLE
  1912.   1684                        
  1913.   1685    8AEE   2F         
  1914.